+++ /dev/null
-/**
- * Contact.js
- *
- * Nokia Web Runtime Service API emulation
- * WRT v1.1
- *
- * Copyright 2009 Nokia Corporation. All rights reserved.
-*/
-
-
-(function(){
-
- var provider = 'Service.Contact' ,
- Interface = 'IDataSource';
-
- /**
- * Contact service
- */
- var ContactService = function(){
- this.GetList = __GetList;
- this.Add = __Add;
- this.Delete = __Delete;
- this.Import = __Import;
- this.Export = __Export;
- this.Organise = __Organise;
- this.Cancel = __Cancel;
- }
-
- device.implementation.extend(provider, Interface, new ContactService() );
-
-
- /******************************************************/
- /******************************************************/
- /******************************************************/
-
- var context = device.implementation.context,
- _t = context._t,
- method = '',
- result = false,
- DBase = null;
-
- /**
- * Contact: GetList
- * @param {Object} criteria
- * @param {Function} [callback] function for async call (optional)
- */
- function __GetList(criteria, callback){
-
- if ((result = validator.apply('GetList', arguments)) !== false)
- return result;
-
- if (!/^(Contact|Group|Database)$/i.test(criteria.Type))
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType);
-
- if (typeof callback == 'function') {
- return context.callAsync(this, arguments.callee, criteria, callback);
- }
-
- var returnValue = [],
- match = null,
- filter = criteria.Filter || null;
-
- DBase = context.getData(provider);
-
- // Type = Database
- if (/Database/i.test(criteria.Type)){
- returnValue = DBase.Database;
- }
- // Type = Group
- else if (/Group/i.test(criteria.Type)){
- // filter by id
- if (filter && filter.id) {
- returnValue = findById(DBase.Group, filter.id);
- if (returnValue.length == 0)
- return error(device.implementation.ERR_NOT_FOUND);
- }
- // return all groups
- else {
- returnValue = DBase.Group;
- }
- }
- // Type = Contact
- else if (/Contact/i.test(criteria.Type)){
-
- // filter by id
- if (filter && filter.id) {
- returnValue = findById(DBase.Contact, filter.id);
- if (returnValue.length == 0)
- return error(device.implementation.ERR_NOT_FOUND);
- }
- // return all contacts
- else {
- returnValue = DBase.Contact;
- }
-
- // unsupported filters
- if (filter
- && (match = context.keys(filter).join().match(/SearchVal|DBUri/ig)) ) {
- context.notify(_t('%s:: GetList : filter %s not implemented in preview').arg(provider, match.join()));
- }
- // unsupported sort
- if (criteria.Sort) {
- context.notify(_t('%s:: GetList : sort not implemented in preview').arg(provider));
- }
- }
- return context.Result(context.Iterator(returnValue));
- }
-
- /**
- * Contact: Add
- * @param {Object} criteria
- * @param {Function} [callback] function for async call (optional)
- */
- function __Add(criteria, callback){
-
- if ((result = validator.apply('Add', arguments)) !== false)
- return result;
-
- if (!/^(Contact|Group)$/i.test(criteria.Type))
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType2);
-
- if (typeof callback == 'function') {
- return context.callAsync(this, arguments.callee, criteria, callback);
- }
-
- DBase = context.getData(provider);
- var Data = criteria.Data,
- item;
-
- // unsupported!
- if (Data.DBUri) {
- context.notify(_t('%s:: Add : Data.DBUri not implemented in preview').arg(provider));
- }
-
- // Type = Group
- if (/Group/i.test(criteria.Type)){
-
- if (!Data.GroupLabel)
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.missingGroupLabel);
-
- // update
- if (Data.id) {
- returnValue = findById(DBase.Group, Data.id);
- if (returnValue.length == 0)
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
-
- returnValue[0].GroupLabel = Data.GroupLabel;
- //@todo: group contents!?
- }
- // new
- else {
- item = context.extend({}, Data);
- item.id = String(context.getUniqueID());
- DBase.Group.push(item);
- }
- }
- // Type = Contact
- else {
- // update
- if (Data.id) {
- returnValue = findById(DBase.Contact, Data.id);
- if (returnValue.length == 0)
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
-
- context.extend(returnValue[0], Data);
- }
- // new
- else {
- item = context.extend({}, Data);
- item.id = String(context.getUniqueID());
- DBase.Contact.push(item);
- }
- }
- // return success
- return error(device.implementation.ERR_SUCCESS);
- }
-
-
- /**
- * Contact: Delete
- * @param {Object} criteria
- * @param {Function} [callback] function for async call (optional)
- */
- function __Delete(criteria, callback){
-
- if ((result = validator.apply('Delete', arguments)) !== false)
- return result;
-
- if (!/^(Contact|Group)$/i.test(criteria.Type))
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType2);
-
- var Data = criteria.Data;
- if (!Data.IdList)
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingIdList);
- if (typeof Data.IdList != 'object')
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badIdList);
-
- DBase = context.getData(provider);
- var type = criteria.Type;
-
- // unsupported!
- if (Data.DBUri) {
- context.notify(_t('%s:: Delete : Data.DBUri not implemented in preview').arg(provider));
- }
-
- if (typeof callback == 'function') {
- return context.callAsync(this, arguments.callee, criteria, callback);
- }
-
- // for both Group & Contact:
- var i,j,id,item;
- for (j in Data.IdList) {
- id = Data.IdList[j];
- for (i in DBase[type]) {
- item = DBase[type][i];
- if (id == item.id) {
- DBase[type].splice(i, 1);
- }
- }
- }
- // return success
- return error(device.implementation.ERR_SUCCESS);
- }
-
-
- /**
- * Contact: Import
- * @param {Object} criteria
- * @param {Function} [callback] function for async call (optional)
- */
- function __Import(criteria, callback){
-
- if ((result = validator.apply('Import', arguments)) !== false)
- return result;
-
- if (!/^(Contact)$/i.test(criteria.Type))
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType3);
-
- var Data = criteria.Data;
- if (!Data.SourceFile)
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingSourceFile);
-
- if (typeof callback == 'function') {
- return context.callAsync(this, arguments.callee, criteria, callback);
- }
-
- context.notify(_t('%s:: Import : not implemented in preview.').arg(provider));
- return error(device.implementation.ERR_SUCCESS);
- }
-
-
- /**
- * Contact: Export
- * @param {Object} criteria
- * @param {Function} [callback] function for async call (optional)
- */
- function __Export(criteria, callback){
-
- if ((result = validator.apply('Export', arguments)) !== false)
- return result;
-
- if (!/^(Contact)$/i.test(criteria.Type))
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType4);
-
- var Data = criteria.Data;
- if (!Data.DestinationFile)
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingDestinationFile);
-
- if (!Data.id)
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingId);
-
- if (typeof callback == 'function') {
- return context.callAsync(this, arguments.callee, criteria, callback);
- }
-
- context.notify(_t('%s:: Export : not implemented in preview.').arg(provider));
- return error(device.implementation.ERR_SUCCESS);
- }
-
-
- /**
- * Contact: Organise
- * @param {Object} criteria
- * @param {Function} [callback] function for async call (optional)
- */
- function __Organise(criteria, callback){
-
- if ((result = validator.apply('Organise', arguments)) !== false)
- return result;
-
- if (!/^(Group)$/i.test(criteria.Type))
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.badType5);
-
- var Data = criteria.Data;
- if (!Data.id)
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingId2);
-
- if (!Data.IdList)
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingIdList);
-
- if (typeof Data.IdList != 'object')
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badIdList);
-
- if (!/^(Associate|Disassociate)$/i.test(criteria.OperationType))
- return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badOperationType);
-
- if (typeof callback == 'function') {
- return context.callAsync(this, arguments.callee, criteria, callback);
- }
-
- context.notify(_t('%s:: Organise : not implemented in preview.').arg(provider));
- return error(device.implementation.ERR_SUCCESS);
- }
-
-
- /**
- * Contact: Cancel
- * @param {Object} criteria
- */
- function __Cancel(criteria){
- method = 'Cancel';
- if (!criteria || !criteria.TransactionID)
- return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.missingTID);
-
- clearTimeout(criteria.TransactionID);
- return context.ErrorResult(device.implementation.ERR_SUCCESS);
- }
-
-
- /*******************************
- * helper functions
- *******************************/
-
- function error(code, msg /*, args...*/){
-
- var args = ['Contacts',method].concat([].slice.call(arguments,2));
- msg = msg ? _t().arg.apply(msg,args) : undefined;
- return context.ErrorResult(code, msg);
- }
-
- /**
- * validate common input arguments
- * 'this' is string (object) name of calling function
- *
- * @param {arguments} arguments of calling function
- * @return {Result} Result object if error, false if no error.
- */
- function validator() {
- method = ''+this;
- var failed = false,
- criteria = arguments[0] || false;
-
- if (!criteria || typeof criteria != 'object' || typeof criteria.Type == 'undefined')
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType, method);
-
- if (method == 'GetList') return failed;
-
- var Data = criteria.Data || false;
- if (!Data)
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingData, method);
- if (typeof Data != 'object')
- return error(device.implementation.ERR_MISSING_ARGUMENT, msg.badData);
-
- return failed;
- }
-
-
- function findById(dbase, id){
- var result = [];
- for (var i in dbase) {
- if (id == dbase[i]['id']) {
- result.push(dbase[i]);
- }
- }
- return result;
- }
-
- /**
- * error messages
- * order of %s args: Service name, method name, parameter name
- */
- var msg = {
- missingType : '%s : %s : Type is Missing',
- badType : '%s: %s : Invalid value for Type, Must be Contact/Group/Database',
- badType2 : '%s : %s : Invalid Type, must be Contact/Group',
- badType3 : '%s : %s : Invalid Type,it must be Contact',
- badType4 : '%s : %s : Invalid Type, it must be Contact',
- badType5 : '%s : %s : Invalid Content Type, It must be Group',
- badOperationType: '%s : %s : Invalid Operation Type',
- missingGroupLabel: '%s : %s : Group Label is Missing',
- missingTID : 'Contact : Cancel : TransactionID is missing', // not 'Contacts'!!
- badAsync : '%s : %s : Invalid async parameters',
- missingData : '%s : %s : %s data Missing',
- badData : '%s : %s : Invalid Type of Data , Map is required',
- missingIdList : '%s : %s : List of Ids is missing',
- badIdList : '%s : %s : Type of IdList is wrong, List is required',
- missingSourceFile: '%s : %s : Import Source Filename is Missing',
- missingDestinationFile: '%s : %s : Export Destination Filename is Missing',
- missingId : '%s : %s : Contact Id to be exported is missing',
- missingId2 : '%s : %s : GroupId is missing',
- is_missing : '%s : %s : %s is missing',
- is_invalid : '%s : %s : %s is invalid'
- };
-
-
-}) ()
-