/**
* 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
// );
}
}