/** * Copyright© 2016, Oracle and/or its affiliates. All rights reserved. */ function SyncProcessor(backend, apiName, endpointPath, resolvingOfflineUpdate, utils, persistence) { var HEADERS = utils.HEADERS; var RESOURCE_TYPES = utils.RESOURCE_TYPES; var _ = persistence.common; this.apiName = apiName; this.endpointPath = endpointPath; this.resolvingOfflineUpdate = resolvingOfflineUpdate; this.getHttpHeaders = function(requestHeaders){ var headers = backend.getHttpHeaders(utils.MODULE_NAMES.SYNC, requestHeaders); headers[HEADERS.ORACLE_MOBILE_SYNC_AGENT] = true; return headers; }; this.getType = function(responseHeaders, responseData){ var type = SyncResourceType.file; // get object type from response headers var resourceType = responseHeaders[HEADERS.ORACLE_MOBILE_SYNC_RESOURCE_TYPE.toLowerCase()]; if(resourceType != null) { if(resourceType === RESOURCE_TYPES.ITEM) { type = SyncResourceType.item; } else if(resourceType === RESOURCE_TYPES.COLLECTION) { type = SyncResourceType.collection; } } else { // in offline mode there is no resource type header, try to detect the type from responseData if(_.isString(responseData)){ try { var json = JSON.parse(responseData); // TODO: validate functionality if(_.isArray(json)){ // the object is collection type = SyncResourceType.collection; } else { type = SyncResourceType.item; } } catch(e) { // the string is not json, so it is file type = SyncResourceType.file; } } } return type; }; this.getUri = function(response, url){ var location = response && response.headers ? response.headers[HEADERS.LOCATION.toLowerCase()] : null; if(location != null){ return '/' + location; } else { var obj = null; if(response.data){ if(typeof response.data === 'string'){ obj = response.data != '' ? JSON.parse(response.data): null; } else { obj = response.data; } } if(obj && obj[persistence.options.module.URI_KEY]){ var uri = obj[persistence.options.module.URI_KEY]; delete obj[persistence.options.module.URI_KEY]; return uri; } else { // return persistence.options.parseURL(url).path; } } }; this.createResource = function(method, url, statusCode, requestHeaders, responseHeaders, requestData, responseData) { var location = response.headers[HEADERS.LOCATION.toLowerCase()]; if(location != null) { location = '/' + location; } else { location = url; } var type = SyncResourceType.file; // get object type from response headers var resourceType = responseHeaders[HEADERS.ORACLE_MOBILE_SYNC_RESOURCE_TYPE.toLowerCase()]; if(resourceType != null) { if(resourceType == RESOURCE_TYPES.ITEM) { type = SyncResourceType.item; } else if(resourceType == RESOURCE_TYPES.COLLECTION) { type = SyncResourceType.collection; } } else { // in offline mode there is no resource type header, try to detect the type from responseData if(_.isString(responseData)){ try { var json = JSON.parse(responseData); // TODO: validate functionality if(_.isArray(json)){ // the object is collection type = SyncResourceType.collection; } else { type = SyncResourceType.item; } } catch(e) { // the string is not json, so it is file type = SyncResourceType.file; } } } return null; // new SyncResource( // _synchronization, // location, // type, // new Date().toISOString(), // requestHeaders, // responseHeaders, // requestData, // responseData // ); } }