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