/** * Copyright© 2016, Oracle and/or its affiliates. All rights reserved. */ /** * Class that provides caching and synchronization capabilities. Callers should use * MobileBackend's [synchronization]{@link MobileBackend#synchronization} property. * @constructor * @global */ function Synchronization(manager, backend, config, utils, platform, persistence) { var _this = this; var _config = config; this._persistence = persistence; /** * The [MobileBackend]{@link MobileBackend} object that this Synchronization instance belongs to. * @type {MobileBackend} * @readonly */ this.backend = backend; // TODO: next version // /** // * The number of cache misses during the current WebStarterApp lifetime. // * @type {number} // * @readonly // */ // this.cacheHitCount = 0; // TODO: next version // /** // * The number of cache hits during the current WebStarterApp lifetime. // * @type {number} // * @readonly // */ // this.cacheMissCount = 0; var _endpoints = {}; // TODO: next version // this._pinnedUrls = {}; /** * Sets the device to offline mode, which is good for testing. * If the device is in real offline mode, then this setting will be ignored * @param isOffline whether to set the device online or offline. */ this.setOfflineMode = manager._setOfflineMode; /** * Gets device network status which is currently being used by Synchronization. * @returns {Boolean} */ this.isOnline = function(){ return persistence.options.isOnline(); }; /** * Deletes all cached resources. */ this.purge = function () { for(var apiName in _endpoints){ if(_endpoints.hasOwnProperty(apiName)){ var api = _endpoints[apiName]; for(var path in api){ if(api.hasOwnProperty(path)){ api[path].purge(); } } } } }; /** * Returns a [MobileEndpoint]{@link MobileEndpoint} that provides access to an endpoint in a custom code API. * @param apiName The name of the custom code API * @param endpointPath The endpoint in the custom code API * @returns A MobileEndpoint object. */ this.openEndpoint = function (apiName, endpointPath) { if (_endpoints[apiName] == null) { _endpoints[apiName] = {}; } if (_endpoints[apiName][endpointPath] == null) { _endpoints[apiName][endpointPath] = new MobileEndpoint(this, apiName, endpointPath, utils, platform); } return _endpoints[apiName][endpointPath]; }; // TODO: next version // this._pin = function (resource, successCallback, errorCallback) { // this._pinnedUrls[resource.url] = mcs._PinStatePinned; // resource.pinState = mcs._PinStatePinned; // // this._store.saveResource(resource, successCallback, errorCallback); // this._store.savePinedResources(this._pinnedUrls); // }; // TODO: next version // this._unpin = function (resource, successCallback, errorCallback) { // delete this._pinnedUrls[resource.url]; // resource.pinState = mcs._PinState.unpinned; // // // PERSISTENCE: Only delete if no collection references this item! // this._store.deleteResource(resource, successCallback, errorCallback); // this._store.savePinedResources(this._pinnedUrls); // } } Synchronization.prototype._run = function(callback){ return persistence.process.run(callback); }; Synchronization.prototype._runWithoutReadInBackground = function(callback){ return persistence.process.runWithoutReadInBackground(callback); };