+++ /dev/null
-/**\r
- * Logging.js\r
- * \r
- * Nokia Web Runtime Service API emulation \r
- * WRT v1.1\r
- * \r
- * Copyright 2009 Nokia Corporation. All rights reserved.\r
-*/\r
-\r
- \r
-(function(){\r
- \r
- var provider = 'Service.Logging',\r
- Interface = 'IDataSource';\r
-\r
- /**\r
- * Landmark service\r
- */\r
- var LoggingService = function(){\r
- this.Add = __Add;\r
- this.GetList = __GetList;\r
- this.Delete = __Delete;\r
- this.RequestNotification = __RequestNotification; \r
- this.Cancel = __Cancel; \r
-\r
- }\r
-\r
- device.implementation.extend(provider, Interface, new LoggingService() );\r
-\r
-\r
- /******************************************************/ \r
- /******************************************************/ \r
- /******************************************************/ \r
-\r
- var context = device.implementation.context,\r
- _t = context._t,\r
- method = '',\r
- result = false,\r
- DBase = null;\r
-\r
- var transactionIds = new Array();\r
- var tTransactionId = -1;\r
- var isTraceInProgress = false;\r
- var criteriaReq;\r
- var callbackReq;\r
-\r
- /**\r
- * Logging: Add\r
- * @param {Object} criteria\r
- * @param (function) callback\r
- */\r
- function __Add(criteria, callback, flag){\r
- method = "Add";\r
- // Async call\r
- flag = flag || false;\r
-\r
- if (!flag) {\r
- var result = ValidateAdd(criteria, callback);\r
- if (result.ErrorCode != 0) \r
- return result;\r
- } \r
- \r
- \r
- if(typeof callback == 'function')\r
- {\r
- return context.callAsync(this, arguments.callee, criteria, callback);\r
- }\r
- DBase = context.getData(provider);\r
- var returnValue = DBase[criteria.Type];\r
- criteria.Item.id = GenerateRandomNumber()+'';\r
- criteria.Item["EventTime"] = GetCurrDate();\r
- returnValue.push(criteria.Item);\r
- return context.Result(criteria.Item.id,0);\r
- }\r
-\r
- /**\r
- * Logging: GetList\r
- * @param {Object} criteria\r
- * @param (function) callback\r
- */\r
- function __GetList(criteria, callback, flag){ \r
- method = "GetList";\r
- // Async call\r
- flag = flag || false;\r
-\r
- if (!flag) {\r
- var result = ValidateGetList(criteria, callback);\r
- if (result.ErrorCode != 0) \r
- return result;\r
- } \r
- \r
- \r
- if(typeof callback == 'function')\r
- {\r
- return context.callAsync(this, arguments.callee, criteria, callback);\r
- }\r
- if(criteria.Filter){\r
- context.notify(_t('%s:: GetList : filter not implemented in preview').arg(provider));\r
- }\r
- \r
- DBase = context.getData(provider);\r
- var returnValue;\r
- // @todo: apply filter criteria\r
- returnValue = context.Iterator( DBase[criteria.Type] || [] );\r
- \r
- return context.Result(returnValue,0);\r
- }\r
-\r
- /**\r
- * Logging: Delete\r
- * @param {Object} criteria\r
- * @param (function) callback\r
- */\r
- function __Delete(criteria, callback, flag){\r
- method = "Delete";\r
- // Async call\r
- flag = flag || false; \r
- if (!flag) {\r
- if (!criteria || !criteria.Type) \r
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTypeMissing);\r
-\r
- if (typeof criteria.Type != 'string') \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTypeInvalid);\r
- \r
- if (criteria.Type != 'Log') \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgTypeInvalid);\r
- \r
- if (!criteria.Data) \r
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgDataMissing);\r
- \r
- if(typeof criteria.Data != 'object')\r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDataInvalid);\r
-\r
- if(typeof criteria.Data.id == 'undefined')\r
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgid);\r
- \r
- if (typeof criteria.Data.id != "string") \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgidInvalid);\r
- \r
- if(criteria.Data.id == '')\r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgidInvalid);\r
- }\r
- DBase = context.getData(provider);\r
- var returnValue,found = false;\r
- returnValue = DBase[criteria.Type];\r
- for(var i=0; i<returnValue.length; i++){\r
- if(returnValue[i].id == criteria.Data.id)\r
- {\r
- found = true;\r
- returnValue.splice(i,1);\r
- } \r
- }\r
- if(!found)\r
- return error(device.implementation.ERR_NOT_FOUND, msg.msgidInvalid);\r
- \r
- return context.Result(undefined,0);\r
- }\r
-\r
- /**\r
- * Logging: RequestNotification\r
- * @param {Object} criteria\r
- * @param (function) callback\r
- */\r
- function __RequestNotification(criteria, callback, flag){\r
- method = "RequestNotification";\r
- \r
- // Async call\r
- flag = flag || false; \r
- if (!flag) {\r
- if (!criteria || !criteria.Type) \r
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTypeMissing);\r
-\r
- if (typeof criteria.Type != 'string') \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTypeInvalid);\r
- \r
- if (criteria.Type != 'Log') \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgTypeInvalid);\r
- \r
- if (!criteria.Filter)\r
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgFilterMissing);\r
-\r
- if(typeof criteria.Filter != 'object') \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgFilterInvalid);\r
- \r
- if(typeof criteria.Filter.DelayTime == 'undefined') \r
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgDelayTimeMissing);\r
- \r
- if(typeof criteria.Filter.DelayTime != 'number')\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDelayTimeInvalid);\r
- if(criteria.Filter.DelayTime <= 0)\r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDelayTimeInvalid);\r
- \r
- if(criteria.Filter.DelayTime < 1000000 )\r
- {\r
- criteria.Filter.DelayTime = 1000000;\r
- context.notify(_t('%s:: RequestNotification : Using DelayTime = 1000000').arg(provider));\r
- }\r
- }\r
- if(typeof callback != 'function')\r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgMissingCallback);\r
-\r
- criteriaReq = criteria;\r
- callbackReq = callback;\r
- isTraceInProgress = true;\r
-\r
- return notificationCall(criteria,callback);\r
- }\r
-\r
- /**\r
- * Logging: Cancel\r
- * @param {Object} criteria\r
- * @param (function) callback\r
- */\r
- function __Cancel(criteria){\r
- method = "Cancel";\r
- if (!criteria || typeof criteria.TransactionID == 'undefined') \r
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTransactionIdMissing);\r
- \r
- if (typeof criteria.TransactionID != 'number') \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgTransactionIdInvalid);\r
- \r
- clearTimeout(criteria.TransactionID);\r
- if (criteria.TransactionID == tTransactionId) {\r
- isTraceInProgress = false;\r
- tTransactionId = -1;\r
- }\r
- return context.ErrorResult(device.implementation.ERR_SUCCESS);\r
-\r
- }\r
- \r
-\r
- /**\r
- * Location: error\r
- * @param {number,string} ErrorCode and ErrorString\r
- * Replaces Error String with method name\r
- */\r
- function error(code, msg /*, args...*/){\r
-\r
- var args = ['Logging',method].concat([].slice.call(arguments,2));\r
- msg = msg ? _t().arg.apply(msg,args) : undefined;\r
- return context.ErrorResult(code, msg);\r
- }\r
- \r
- /**\r
- * Logging: notificationCall\r
- * @param {} \r
- * This function Calls callback function after given delay\r
- */\r
- function notificationCall(){\r
- var tid = setTimeout(function(){\r
- if(!isTraceInProgress)\r
- return;\r
- \r
- DBase = context.getData(provider);\r
- var returnValue;\r
- returnValue = context.Iterator( DBase[criteriaReq.Type] || [] );\r
-\r
- var result,\r
- eventCode = {completed:2, error:4, progress:9},\r
- code = eventCode.completed;\r
-\r
- callbackReq(tTransactionId,code,context.Result(returnValue,0));\r
- //notificationCall();\r
- }, criteriaReq.Filter.DelayTime/1000);\r
- if(tTransactionId == -1)\r
- tTransactionId = tid;\r
- return context.AsyncResult(tTransactionId);\r
- }\r
- \r
- /**\r
- * Helper functions\r
- */\r
-\r
- /**\r
- * GenerateRandomNumber\r
- * @param {}array of log data for getting unique ID \r
- * \r
- */\r
- function GenerateRandomNumber(arr)\r
- {\r
- var randomnumber = Math.floor(Math.random() * 10001);\r
- randomnumber +=200;\r
- return randomnumber;\r
- }\r
-\r
- /**\r
- * GetCurrDate\r
- * @param {}Gets date in internet format\r
- * \r
- */\r
- function GetCurrDate()\r
- {\r
- var d_names = new Array("Sunday", "Monday", "Tuesday",\r
- "Wednesday", "Thursday", "Friday", "Saturday");\r
- \r
- var m_names = new Array("January", "February", "March", \r
- "April", "May", "June", "July", "August", "September", \r
- "October", "November", "December");\r
- \r
- var ampm = "am";\r
- \r
- var d = new Date();\r
- var curr_day = d.getDay();\r
- var curr_date = d.getDate();\r
- if(curr_date <10)\r
- curr_date = "0"+curr_date;\r
- var curr_month = d.getMonth();\r
- var curr_year = d.getFullYear();\r
- var curr_hour = d.getHours();\r
- if(curr_hour > 11)\r
- {\r
- ampm = "pm";\r
- }\r
- else if(curr_hour <10)\r
- {\r
- curr_hour = "0"+curr_hour;\r
- } \r
- var curr_min = d.getMinutes();\r
- if(curr_min <10)\r
- curr_min = "0"+curr_min;\r
- \r
- var curr_sec = d.getSeconds();\r
- if(curr_sec <10)\r
- curr_sec = "0"+curr_sec;\r
- \r
- var strDate = d_names[curr_day]+', '+curr_date+' '+m_names[curr_month]+', '+curr_year+' '+curr_hour+':'+curr_min+':'+curr_sec+' '+ampm;\r
- return strDate;\r
- } \r
-\r
- /**\r
- * ValidateAdd\r
- * @param {object,function}\r
- * Validates ADD arguments\r
- */ \r
- function ValidateAdd(criteria,callback)\r
- {\r
- var type;\r
- if(!criteria || !criteria.Type)\r
- return error(device.implementation.ERR_MISSING_ARGUMENT,msg.msgTypeMissing);\r
-\r
- if (typeof criteria.Type != 'string') \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTypeInvalid);\r
- \r
- if(criteria.Type != 'Log')\r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT,msg.msgTypeInvalid);\r
- \r
- if (!criteria.Item)\r
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgItemMissing);\r
-\r
- if(typeof criteria.Item != 'object') \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgItemInvalid);\r
- \r
- \r
- if(typeof criteria.Item.EventType == "undefined")\r
- return error(device.implementation.ERR_MISSING_ARGUMENT,msg.msgEventTypeMissing);\r
-\r
- if(typeof criteria.Item.EventType != "number" )\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgEventTypeInvalid);\r
- \r
- if(typeof criteria.Item.EventType == "number" && !(criteria.Item.EventType >=0 && criteria.Item.EventType <=4))\r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT,msg.msgEventTypeInvalid);\r
- \r
- type = typeof criteria.Item.RemoteParty;\r
- if(type != 'undefined' && type != "string")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgRemotePartyInvalid);\r
- \r
- type = typeof criteria.Item.Direction;\r
- if (type != 'undefined') {\r
- if (type != "number") \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDirectionInvalid);\r
- \r
- if (type == "number" && (criteria.Item.Direction < 0 || criteria.Item.Direction > 6)) \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDirectionInvalid);\r
- }\r
-\r
- type = typeof criteria.Item.EventDuration;\r
- if(type != 'undefined' && type != "number")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgEventDurationInvalid);\r
- \r
- type = typeof criteria.Item.DeliveryStatus;\r
- if (type != 'undefined') {\r
- if (type != "number") \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDeliveryStatusInvalid);\r
- \r
- if (type == "number" && (criteria.Item.DeliveryStatus < 0 || criteria.Item.DeliveryStatus > 6)) \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDeliveryStatusInvalid);\r
- }\r
- \r
- type = typeof criteria.Item.Subject;\r
- if(type != 'undefined' && type != "string")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgSubjectInvalid);\r
-\r
- type = typeof criteria.Item.PhoneNumber;\r
- if(type != 'undefined' && type != "string")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgPhoneNumberInvalid);\r
-\r
- type = typeof criteria.Item.Link;\r
- if(type != 'undefined' && type != "number")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgLinkInvalid);\r
-\r
- type = typeof criteria.Item.LogFlags;\r
- if(type != 'undefined' && (type != "number" || (criteria.Item.LogFlags != 1 && criteria.Item.LogFlags != 0)))\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgLogFlagsInvalid);\r
-\r
- return context.ErrorResult(device.implementation.ERR_SUCCESS, "");\r
- } \r
-\r
- /**\r
- * ValidateGetList\r
- * @param {object,function}\r
- * Validates GetList function\r
- */ \r
- function ValidateGetList(criteria,callback)\r
- {\r
- var type;\r
- if(!criteria || !criteria.Type)\r
- return error(device.implementation.ERR_MISSING_ARGUMENT,msg.msgTypeMissing);\r
-\r
- if (typeof criteria.Type != 'string') \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTypeInvalid);\r
- \r
- if(criteria.Type != 'Log')\r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT,msg.msgTypeInvalid);\r
-\r
- type = typeof criteria.Filter;\r
- if(type != 'undefined' && type != "object")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgFilterInvalid);\r
- \r
- if(type == 'undefined')\r
- return context.ErrorResult(device.implementation.ERR_SUCCESS, ""); \r
- \r
- type = typeof criteria.Filter.id;\r
- if(type != 'undefined' && type != "string")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgid);\r
- \r
- if(type != 'undefined')\r
- return context.ErrorResult(device.implementation.ERR_SUCCESS, ""); // if id is given all other filters will be ignored\r
-\r
- type = typeof criteria.Filter.EventType;\r
- if (type != 'undefined') {\r
- if (type != "number") \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgEventTypeInvalid);\r
- \r
- if (type != "number" || !(criteria.Filter.EventType >= 0 && criteria.Filter.EventType <= 4)) \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgEventTypeInvalid);\r
- } \r
- type = typeof criteria.Filter.RecentList;\r
- if (type != 'undefined') {\r
- if (type != "number") \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgRecentListInvalid);\r
- if (type == "number" && (criteria.Filter.RecentList < -1 || criteria.Filter.RecentList > 3)) \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgRecentListInvalid);\r
- }\r
- \r
- type = typeof criteria.Filter.RemoteParty;\r
- if(type != 'undefined' && type != "string")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgRemotePartyInvalid);\r
- \r
- type = typeof criteria.Filter.Direction;\r
- if (type != 'undefined') {\r
- if (type != "number") \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDirectionInvalid);\r
- if (type == "number" && (criteria.Filter.Direction < 0 || criteria.Filter.Direction > 6)) \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDirectionInvalid);\r
- }\r
- \r
- type = typeof criteria.Filter.DeliveryStatus;\r
- if (type != 'undefined') {\r
- if (type != "number") \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDeliveryStatusInvalid);\r
- if (type == "number" && (criteria.Filter.DeliveryStatus < 0 || criteria.Filter.DeliveryStatus > 6)) \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDeliveryStatusInvalid);\r
- }\r
-\r
- type = typeof criteria.Filter.EndTime;\r
- if(type != 'undefined' && (type != "object" || typeof criteria.Filter.EndTime.getTime != "function"))\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgEndTimeInvalid);\r
-\r
- type = typeof criteria.Filter.PhoneNumber;\r
- if(type != 'undefined' && type != "string")\r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgPhoneNumberInvalid);\r
-\r
-\r
- type = typeof criteria.Filter.LogFlags;\r
- if (type != 'undefined') {\r
- if (type != "number") \r
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgLogFlagsInvalid);\r
- if (type == "number" && (criteria.Filter.LogFlags != 1 && criteria.Filter.LogFlags != 0)) \r
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgLogFlagsInvalid);\r
- }\r
- return context.ErrorResult(device.implementation.ERR_SUCCESS, "");\r
- } \r
-\r
-\r
- /** \r
- * error messages\r
- * order of %s args: Service name, method name, parameter name \r
- */\r
- var msg = {\r
- msgTypeInvalid : '%s:%s:TypeInvalid',\r
- msgTypeMissing : '%s:%s:Type Missing',\r
- msgFilterInvalid : '%s:%s:FilterInvalid',\r
- msgidInvalid : '%s:%s:idInvalid',\r
- msgRecentListInvalid : '%s:%s:RecentListInvalid',\r
- msgPhoneNumberInvalid : '%s:%s:PhoneNumberInvalid',\r
- msgDirectionInvalid : '%s:%s:DirectionInvalid',\r
- msgDeliveryStatusInvalid : '%s:%s:DeliveryStatusInvalid',\r
- msgLogFlagsInvalid : '%s:%s:LogFlagsInvalid',\r
- msgEndTimeInvalid : '%s:%s:EndTimeInvalid',\r
- msgRemotePartyInvalid : '%s:%s:RemotePartyInvalid',\r
- msgEventTypeInvalid : '%s:%s:EventTypeInvalid',\r
- msgItemInvalid : '%s:%s:ItemInvalid',\r
- msgItemMissing : '%s:%s:ItemMissing',\r
- msgEventTypeInvalid : '%s:%s:EventTypeInvalid',\r
- msgEventTypeMissing : '%s:%s:EventType Missing',\r
- msgEventDurationInvalid : '%s:%s:EventDurationInvalid',\r
- msgSubjectInvalid : '%s:%s:SubjectInvalid',\r
- msgEventDataInvalid : '%s:%s:EventDataInvalid',\r
- msgLinkInvalid : '%s:%s:LinkInvalid',\r
- msgDataInvalid : '%s:%s:DataInvalid',\r
- msgDataMissing : '%s:%s:Data Missing',\r
- msgid : '%s:%s:id',\r
- msgFilterInvalid : '%s:%s:FilterInvalid',\r
- msgFilterMissing : '%s:%s:Filter Missing',\r
- msgDelayTimeInvalid : '%s:%s:DelayTimeInvalid',\r
- msgDelayTimerMissing : '%s:%s:DelayTimerMissing',\r
- msgTransactionIdInvalid : '%s:%s:TransactionIdInvalid',\r
- msgTransactionIdMissing : '%s:%s:TransactionID Missing',\r
- msgMissingCallback : '%s:%s:Missing Callback',\r
- msgNoMsg : '%s:%s:'\r
- };\r
- \r
-\r
-}) ()\r
-\r