{"version":3,"sources":["odatajs-4.0.4.js"],"names":["init","exports","module","require","version","major","minor","build","deferred","utils","xml","oData","store","cache","datas","appendPage","operation","page","intersection","intersectRanges","start","end","i","c","getJsonValueArraryLength","d","concatJsonValueArray","sliceJsonValueArray","x","y","result","xLast","yLast","resultIndex","resultLast","checkZeroGreater","val","name","undefined","message","isNaN","isFinite","checkUndefinedGreaterThanZero","checkUndefinedOrNumber","removeFromArray","arr","item","len","length","splice","estimateSize","object","size","type","snapToPageBoundaries","lowIndex","highIndex","pageSize","Math","floor","ceil","DataCacheOperation","stateMachine","promise","isCancelable","index","count","data","pending","stateData","cacheState","that","this","p","s","OPERATION_STATE_START","canceled","oncomplete","cancel","state","OPERATION_STATE_ERROR","OPERATION_STATE_END","OPERATION_STATE_CANCEL","transition","complete","djsassert","error","err","run","wait","OPERATION_STATE_WAIT","operationStateMachine","opTargetState","CACHE_STATE_INIT","fireCanceled","fireRejected","fireResolved","handled","DataCache","options","cacheFailure","stats","counts","netReads","prefetches","cacheReads","clearOperations","readOperations","prefetchOperations","actualCacheSize","allDataLocal","cacheSize","undefinedDefault","collectionCount","highestSavedPage","highestSavedPageSize","overflowed","prefetchSize","pendingOperations","source","cacheSource","ODataCacheSource","storeReq","createStore","mechanism","onidle","idle","createDeferred","delay","resolve","request","reject","extend","abort","clear","op","destroyStateMachine","queueAndStart","filterForward","predicate","filter","filterBack","readRange","readStateMachine","ToObservable","toObservable","inBrowser","window","Rx","Observable","obs","disposed","errorCallback","onError","successCallback","value","onNext","onCompleted","then","Dispose","dispose","cacheFailureCallback","changeState","newState","operations","concat","clearStore","CACHE_STATE_DESTROY","DjsDeferred","close","dequeueOperation","removed","CACHE_STATE_IDLE","fetchPage","read","backwards","parseInt10","max","returnData","pendingReadRange","readMore","readIndex","readCount","dataIndex","element","unshift","push","nextIndex","initialPage","initialIndex","initialCount","fireOnIdle","prefetch","CACHE_STATE_READ","prefetchStateMachine","queue","readPage","key","storeFailureCallback","contains","contained","_","savePage","pageBytes","addOrUpdate","updateSettings","saveSettings","success","settings","sourceId","identifier","pageCount","pageIndex","cancelStateMachine","DESTROY_STATE_CLEAR","CACHE_STATE_PREFETCH","READ_STATE_LOCAL","READ_STATE_DONE","min","readSaveStateMachine","CACHE_STATE_WRITE","range","isPrefetch","found","READ_STATE_SOURCE","READ_STATE_SAVE","saved","assigned","settingsVersion","indexOf","createDataCache","isArray","normalizeURI","prototype","reason","appendQueryOption","uri","queryOption","appendSegment","segment","queryPortion","substr","buildODataRequest","method","requestUri","user","password","enableJsonpCallback","callbackParameterName","formatQueryString","queryForData","queryForDataInternal","currentRequest","odataRequest","newData","nextLink","substring","property","httpClient","metadata","normalizeURICase","encodeURI","decodeURI","toString","forwardCall","thisValue","returnValue","apply","arguments","_arguments","_done","_fail","_resolved","_rejected","jQuery","Deferred","fulfilledHandler","errorHandler","odata","dispatchHandler","handlerMethod","requestOrResponse","context","handlers","odataUtils","odataHandler","handler","odataMetadata","odataNet","net","odataJson","json","batch","throwErrorCallback","defined","MAX_DATA_SERVICE_VERSION","invokeRequest","metadataParser","prepareRequest","jsonHandler","textHandler","defaultSuccess","alert","JSON","stringify","defaultError","defaultHandler","response","body","headers","write","maxDataServiceVersion","accept","defaultMetadata","urlOrRequest","String","defaultHttpClient","recognizeDates","bIsSuccessHandlerError","parseMetadata","csdlMetadataDocument","batchHandler","partHandler","metadataHandler","hex16","random","createBoundary","prefix","currentBoundary","boundaries","batchParser","text","__batchResponses","readBatch","contentType","properties","handlerContext","batchSerializer","batchMediaType","mediaType","writeBatch","delimiter","readTo","readLine","responses","partEnd","position","changeResponses","partHeaders","readHeaders","partContentType","boundary","e","readResponse","__changeResponses","pop","statusCode","parts","line","pos","responseHeaderRegex","exec","normalizeHeaders","statusText","match","responseStatusRegex","str","isBatch","batchBoundary","batchParts","__batchRequests","writeBatchPartDelimiter","writeBatchPart","part","nested","changeSet","__changeRequests","changeSetBoundary","partContext","writeRequest","trimString","contentTypeParts","split","contentTypeParams","contentTypeToString","createReadWriteContext","dataServiceVersion","rwContext","fixRequestHeader","fixDataServiceVersionHeader","dsv","maxVersion","getRequestOrResponseHeader","getContentType","getDataServiceVersion","matches","versionRE","handlerAccepts","cType","handlerRead","parseCallback","readContext","handlerWrite","serializeCallback","writeContext","textParse","textSerialize","oDataUtils","jsonParser","metadataContentType","model","parse","payloadFormat","getFormatKind","addMinimalMetadataToJsonPayload","addFullMetadataToJsonPayload","jsonSerializer","jsonContentType","newdata","formatJsonRequestPayload","jsonReplacer","isPrimitive","newArrayData","isJsonSerializableProperty","attribute","jsonSerializableMetadata","jsonMakePayloadInfo","kind","isObject","hasOwnProperty","isGeographyEdmType","isGeometryEdmType","convertDatesNoEdm","typeFromObject","addType","checkProperties","objectInfoType","baseURI","curType","propertyValue","lookupProperty","baseType","lookupEntityType","isCollectionType","addTypeColNoEdm","addTypeNoEdm","addMetadataToJsonMinimalPayloadComplex","convertDates","contextUrlAnnotation","payloadInfo","createPayloadInfo","detectedPayloadKind","PAYLOADTYPE_VALUE","addMetadataToJsonMinimalPayloadEntity","typeName","PAYLOADTYPE_FEED","addMetadataToJsonMinimalPayloadFeed","PAYLOADTYPE_ENTRY","PAYLOADTYPE_COLLECTION","addMetadataToJsonMinimalPayloadCollection","PAYLOADTYPE_PROPERTY","PAYLOADTYPE_SVCDOC","PAYLOADTYPE_LINKS","feedInfo","entry","entries","items","contentTypeOdata","objectInfo","keyType","lastIdSegment","jsonGetEntryKey","lastIndexOf","propertyType","lookupComplexType","collectionInfo","fullName","propertyName","parseDate","parseDateTimeOffset","parseDuration","parseTime","formatLiteral","formatRawLiteral","encodeURIComponent","replace","convertByteArrayToHexString","minutesToOffset","minutes","sign","hours","formatNumberWidth","parseJsonDateString","jsonDateRE","Date","mins","current","getUTCMinutes","setUTCMinutes","__edmType","__offset","valueOf","parseContextUriFragment","fragments","ret","isNullProperty","PAYLOADTYPE_ENTITY_REF_LINKS","PAYLOADTYPE_ENTITY_REF_LINK","fragmentParts","fragment","rCount","charAt","inPharenthesis","startsWith","projection","jsonIsPrimitiveType","container","lookupDefaultEntityContainer","entitySet","lookupEntitySet","entityType","singleton","lookupSingleton","endsWith","tmp12","deltaKind","DELTATYPE_FEED","DELTATYPE_DELETED_ENTRY","DELTATYPE_LINK","DELTATYPE_DELETED_LINK","metadataUri","fragmentStart","entityModel","entityInstanceKey","entityKeys","propertyRef","first","isPrimitiveEdmType","oDataHandler","odataNs","odataAnnotationPrefix","formatDuration","formatDateTimeOffset","getCanonicalTimezone","isComplex","jsonMediaType","schemaElement","attributes","elements","ns","scriptCase","firstTwo","toUpperCase","toLowerCase","getChildSchema","parentSchema","candidateName","elementName","multipleElements","isEdmNamespace","nsURI","edmNs1","parseConceptualModelElement","localName","xmlLocalName","xmlNamespaceURI","elementSchema","schema","xmlAttributes","xmlnsNS","schemaName","odataMetaXmlNs","xmlChildElements","child","childSchema","xmlInnerText","doc","xmlParse","xmlFirstChildElement","oDSxml","xmlNS","ado","http","adoDs","edmxNs","Action","ActionImport","Annotation","AnnotationPath","Annotations","Apply","And","Or","Not","Eq","Ne","Gt","Ge","Lt","Le","Binary","Bool","Cast","Collection","ComplexType","DateTimeOffset","Decimal","Duration","EntityContainer","EntitySet","EntityType","EnumMember","EnumType","Float","Function","FunctionImport","Guid","If","Int","IsOf","Key","LabeledElement","LabeledElementReference","Member","NavigationProperty","NavigationPropertyBinding","NavigationPropertyPath","Null","OnDelete","Path","Parameter","Property","PropertyPath","PropertyRef","PropertyValue","Record","ReferentialConstraint","ReturnType","Schema","Singleton","Term","TimeOfDay","TypeDefinition","UrlRef","Edmx","DataServices","Reference","Include","IncludeAnnotations","canUseJSONP","createIFrame","url","iframe","document","createElement","style","display","attributeEncodedUrl","html","getElementsByTagName","appendChild","writeHtmlToIFrame","createXmlHttpRequest","XMLHttpRequest","exception","ActiveXObject","isAbsoluteUrl","isLocalUrl","location","locationDomain","protocol","host","removeCallback","tick","ticks","removeIFrame","parentNode","removeChild","readResponseHeaders","xhr","responseHeaders","getAllResponseHeaders","header","frameDocument","contentWindow","contentDocument","open","done","handleTimeout","onreadystatechange","readyState","status","responseText","setRequestHeader","withCredentials","timeoutMS","timeout","ontimeout","send","timeoutId","tickText","succeeded","clearTimeout","Content-Type","OData-Version","setTimeout","queryStringParams","qIndex","odatautils","forEachSchema","callback","dataServices","formatMilliseconds","ms","formatDateTimeOffsetJSON","getTime","hasOffset","isDateTimeOffset","offset","timezone","parseTimezone","getUTCHours","h","m","setUTCHours","year","getUTCFullYear","month","getUTCMonth","getUTCMilliseconds","__ns","getUTCDate","getUTCSeconds","days","seconds","width","append","getCollectionType","isCollection","colData","results","collectionTypeRE","test","isDate","isDeferred","__metadata","__deferred","isEntry","isFeed","feedData","geographyEdmTypes","geographyTypes","geometryEdmTypes","geometryTypes","isNamedStream","mediaResource","__mediaresource","media_src","primitiveEdmTypes","navigationPropertyKind","propertyModel","relationship","find","lookupInMetadata","lookupInSchema","entitySets","singletons","entityContainer","lookupEntityContainer","lookupFunctionImport","functionImports","functionImport","lookupNavigationPropertyType","navigationProperty","rel","association","nameOnly","removeNamespace","namespace","associations","role","toRole","lookupNavigationPropertyEntitySet","sourceEntitySetName","associationSet","containers","associationSets","j","getEntitySetInfo","entitySetName","containerName","left","right","leftParts","rightParts","leftVersion","rightVersion","lowerName","normalName","normalHeaders","parseBool","parseDateTimeMaybeOffset","withOffset","nullOnError","parseDateTimeRE","direction","setUTCFullYear","parseTimeOfDay","parseTimeOfDayRE","duration","parseTimeRE","years","months","parseFloat","Accept","async","traverseInternal","owner","traverse","dataItemTypeName","EDM","EDM_BOOLEAN","EDM_BYTE","EDM_SBYTE","EDM_INT16","EDM_INT32","EDM_INT64","EDM_SINGLE","EDM_DOUBLE","EDM_DECIMAL","EDM_STRING","EDM_BINARY","EDM_DATE","EDM_DATETIMEOFFSET","EDM_DURATION","EDM_GUID","EDM_TIMEOFDAY","GEOGRAPHY","EDM_GEOGRAPHY","EDM_GEOGRAPHY_POINT","EDM_GEOGRAPHY_LINESTRING","EDM_GEOGRAPHY_POLYGON","EDM_GEOGRAPHY_COLLECTION","EDM_GEOGRAPHY_MULTIPOLYGON","EDM_GEOGRAPHY_MULTILINESTRING","EDM_GEOGRAPHY_MULTIPOINT","GEOGRAPHY_POINT","GEOGRAPHY_LINESTRING","GEOGRAPHY_POLYGON","GEOGRAPHY_COLLECTION","GEOGRAPHY_MULTIPOLYGON","GEOGRAPHY_MULTILINESTRING","GEOGRAPHY_MULTIPOINT","GEOMETRY","EDM_GEOMETRY","EDM_GEOMETRY_POINT","EDM_GEOMETRY_LINESTRING","EDM_GEOMETRY_POLYGON","EDM_GEOMETRY_COLLECTION","EDM_GEOMETRY_MULTIPOLYGON","EDM_GEOMETRY_MULTILINESTRING","EDM_GEOMETRY_MULTIPOINT","GEOMETRY_POINT","GEOMETRY_LINESTRING","GEOMETRY_POLYGON","GEOMETRY_COLLECTION","GEOMETRY_MULTIPOLYGON","GEOMETRY_MULTILINESTRING","GEOMETRY_MULTIPOINT","content-type","content-encoding","content-length","odata-version","accept-charset","if-match","if-none-match","odata-isolation","odata-maxversion","prefer","content-id","content-transfer-encoding","etag","odata-entityid","preference-applied","retry-after","GEOJSON_POINT","GEOJSON_LINESTRING","GEOJSON_POLYGON","GEOJSON_MULTIPOINT","GEOJSON_MULTILINESTRING","GEOJSON_MULTIPOLYGON","GEOJSON_GEOMETRYCOLLECTION","defaultStoreMechanism","DomStore","isSupported","factory","mechanisms","create","IndexedDBStore","MemoryStore","indexeddb","dom","memory","domStoreDateToJSON","newValue","v","t","domStoreJSONToDate","qualifyDomStoreKey","unqualifyDomStoreKey","localStorage","add","Array","fullKey","oldDateToJSON","toJSON","storedValue","setItem","code","number","removeItem","getItem","getAllKeys","remove","update","getError","errorFunc","Object","call","errName","errObj","target","ex","openStoreDb","storeName","dbName","indexedDB","onblocked","onerror","onupgradeneeded","db","objectStoreNames","createObjectStore","onsuccess","event","versionRequest","setVersion","transaction","onversionchange","openTransaction","mode","storeDb","mozIndexedDB","webkitIndexedDB","msIndexedDB","IDBKeyRange","webkitIDBKeyRange","IDBTransaction","webkitIDBTransaction","IDBT_READ_ONLY","READ_ONLY","IDBT_READ_WRITE","READ_WRITE","keys","values","onabort","objectStore","record","put","get","openCursor","cursor","only","pair","validateKeyInput","messageString","holes","getErrorCallback","a","b","args","slice","condition","parseInt","renameProperty","obj","oldName","newName","trim","defaultValue","getURIInfo","isAbsolute","uriRegEx","uriPartNames","scheme","getURIFromInfo","uriInfo","authority","path","query","uriAuthorityRegEx","pctEncodingRegEx","base","baseInfo","normInfo","mergeUriPathWithBase","removeDotsFromPath","uriPath","basePath","atob","decodeBase64","binaryStr","charCodeAt","hexValue","hexValues","binaryString","base65IndexValue","getBase64IndexValue","binaryValue","addBase64Padding","byteArray","numberOfBytes","intValue","character","asciiCode","asciiOfA","concatData","input","search","format","defaultFormatKind","formatKind","activeXObject","progId","hasLeadingOrTrailingWhitespace","isWhitespace","ws","isWhitespacePreserveContext","domElement","nodeType","xmlAttributeValue","isXmlNSDeclaration","domAttribute","nodeName","safeSetProperty","setProperty","msXmlDom3","msxml3","msXmlDom","msxml","msXmlParse","loadXML","parseError","errorCode","xmlThrowParserError","srcText","exceptionOrReason","errorXmlText","domParser","DOMParser","parseFromString","documentElement","namespaceURI","mozillaParserErroNS","srcTextElement","xmlNodeValue","xhtmlNS","xmlFirstDescendantElement","siblings","firstChild","nextSibling","shift","xmlQualifiedName","xmlAppendText","domNode","textNode","attr","xmlAttributeNode","xmlNewAttribute","ownerDocument","xmlAppendChild","onAttributeCallback","getNamedItemNS","getQualifiedItem","xmlBaseURI","onElementCallback","xmlTraverse","xmlFindElementByPath","root","xmlFindNodeByPath","lastSegmentStart","nodePath","parentPath","node","xmlFirstElementMaybeRecursive","getElementsByTagNameNS","recursive","firstElement","isExpectedNamespace","isExpectedNodeName","xmlElement","whitespacePreserveContext","whitespaceAlreadyRemoved","preserveWhiteSpace","shouldInclude","baseName","nodeValue","onChildCallback","subtrees","proceed","xmlSiblingElement","sibling","xmlDom","implementation","createDocument","xmlAppendChildren","parent","children","xmlNewText","setAttributeNodeNS","setAttributeNode","qualifiedName","createAttributeNS","createNode","xmlNewElement","createElementNS","nampespaceURI","xmlNewNSDeclaration","xmlNewFragment","tempDom","tempRoot","imported","importNode","createDocumentFragment","importedChild","createTextNode","xmlNewNodeByPath","xmlFindNode","xmlNewNode","xmlNode","childNode","xmlSerialize","xmlSerializer","XMLSerializer","serializeToString","xmlSerializeDescendants","childNodes","fragmentRoot","w3org","modules","odatajs"],"mappings":"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","file":"odatajs-4.0.4.min.js","sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n(function () {\n var init = function (exports, module, require) {\n \n\n// version information \nexports.version = { major: 4, minor: 0, build: 2 };\n\n// core stuff, always needed\nexports.deferred = require('./lib/deferred.js');\nexports.utils = require('./lib/utils.js');\n\n// only needed for xml metadata \nexports.xml = require('./lib/xml.js');\n\n// only need in browser case\nexports.oData = require('./lib/odata.js');\nexports.store = require('./lib/store.js');\nexports.cache = require('./lib/cache.js');\n\n };\n\n var datas = {\"cache\" : function(exports, module, require) {\n'use strict';\n\n /** @module cache */\n\n//var odatajs = require('./odatajs/utils.js');\nvar utils = require('./utils.js');\nvar deferred = require('./deferred.js');\nvar storeReq = require('./store.js');\nvar cacheSource = require('./cache/source.js');\n\n\nvar assigned = utils.assigned;\nvar delay = utils.delay;\nvar extend = utils.extend;\nvar djsassert = utils.djsassert;\nvar isArray = utils.isArray;\nvar normalizeURI = utils.normalizeURI;\nvar parseInt10 = utils.parseInt10;\nvar undefinedDefault = utils.undefinedDefault;\n\nvar createDeferred = deferred.createDeferred;\nvar DjsDeferred = deferred.DjsDeferred;\n\n\nvar getJsonValueArraryLength = utils.getJsonValueArraryLength;\nvar sliceJsonValueArray = utils.sliceJsonValueArray;\nvar concatJsonValueArray = utils.concatJsonValueArray;\n\n\n\n/** Appends a page's data to the operation data.\n * @param {Object} operation - Operation with (i)ndex, (c)ount and (d)ata.\n * @param {Object} page - Page with (i)ndex, (c)ount and (d)ata.\n */\nfunction appendPage(operation, page) {\n\n var intersection = intersectRanges(operation, page);\n var start = 0;\n var end = 0;\n if (intersection) {\n start = intersection.i - page.i;\n end = start + (operation.c - getJsonValueArraryLength(operation.d));\n }\n\n operation.d = concatJsonValueArray(operation.d, sliceJsonValueArray(page.d, start, end));\n}\n\n/** Returns the {(i)ndex, (c)ount} range for the intersection of x and y.\n * @param {Object} x - Range with (i)ndex and (c)ount members.\n * @param {Object} y - Range with (i)ndex and (c)ount members.\n * @returns {Object} The intersection (i)ndex and (c)ount; undefined if there is no intersection.\n */\nfunction intersectRanges(x, y) {\n\n var xLast = x.i + x.c;\n var yLast = y.i + y.c;\n var resultIndex = (x.i > y.i) ? x.i : y.i;\n var resultLast = (xLast < yLast) ? xLast : yLast;\n var result;\n if (resultLast >= resultIndex) {\n result = { i: resultIndex, c: resultLast - resultIndex };\n }\n\n return result;\n}\n\n/** Checks whether val is a defined number with value zero or greater.\n * @param {Number} val - Value to check.\n * @param {String} name - Parameter name to use in exception.\n * @throws Throws an exception if the check fails\n */\nfunction checkZeroGreater(val, name) {\n\n if (val === undefined || typeof val !== \"number\") {\n throw { message: \"'\" + name + \"' must be a number.\" };\n }\n\n if (isNaN(val) || val < 0 || !isFinite(val)) {\n throw { message: \"'\" + name + \"' must be greater than or equal to zero.\" };\n }\n}\n\n/** Checks whether val is undefined or a number with value greater than zero.\n * @param {Number} val - Value to check.\n * @param {String} name - Parameter name to use in exception.\n * @throws Throws an exception if the check fails\n */\nfunction checkUndefinedGreaterThanZero(val, name) {\n\n if (val !== undefined) {\n if (typeof val !== \"number\") {\n throw { message: \"'\" + name + \"' must be a number.\" };\n }\n\n if (isNaN(val) || val <= 0 || !isFinite(val)) {\n throw { message: \"'\" + name + \"' must be greater than zero.\" };\n }\n }\n}\n\n/** Checks whether val is undefined or a number\n * @param {Number} val - Value to check.\n * @param {String} name - Parameter name to use in exception.\n * @throws Throws an exception if the check fails\n */\nfunction checkUndefinedOrNumber(val, name) {\n if (val !== undefined && (typeof val !== \"number\" || isNaN(val) || !isFinite(val))) {\n throw { message: \"'\" + name + \"' must be a number.\" };\n }\n}\n\n/** Performs a linear search on the specified array and removes the first instance of 'item'.\n * @param {Array} arr - Array to search.\n * @param {*} item - Item being sought.\n * @returns {Boolean} true if the item was removed otherwise false\n */\nfunction removeFromArray(arr, item) {\n\n var i, len;\n for (i = 0, len = arr.length; i < len; i++) {\n if (arr[i] === item) {\n arr.splice(i, 1);\n return true;\n }\n }\n\n return false;\n}\n\n/** Estimates the size of an object in bytes.\n * Object trees are traversed recursively\n * @param {Object} object - Object to determine the size of.\n * @returns {Number} Estimated size of the object in bytes.\n */\nfunction estimateSize(object) {\n var size = 0;\n var type = typeof object;\n\n if (type === \"object\" && object) {\n for (var name in object) {\n size += name.length * 2 + estimateSize(object[name]);\n }\n } else if (type === \"string\") {\n size = object.length * 2;\n } else {\n size = 8;\n }\n return size;\n}\n\n/** Snaps low and high indices into page sizes and returns a range.\n * @param {Number} lowIndex - Low index to snap to a lower value.\n * @param {Number} highIndex - High index to snap to a higher value.\n * @param {Number} pageSize - Page size to snap to.\n * @returns {Object} A range with (i)ndex and (c)ount of elements.\n */\nfunction snapToPageBoundaries(lowIndex, highIndex, pageSize) {\n lowIndex = Math.floor(lowIndex / pageSize) * pageSize;\n highIndex = Math.ceil((highIndex + 1) / pageSize) * pageSize;\n return { i: lowIndex, c: highIndex - lowIndex };\n}\n\n// The DataCache is implemented using state machines. The following constants are used to properly\n// identify and label the states that these machines transition to.\nvar CACHE_STATE_DESTROY = \"destroy\";\nvar CACHE_STATE_IDLE = \"idle\";\nvar CACHE_STATE_INIT = \"init\";\nvar CACHE_STATE_READ = \"read\";\nvar CACHE_STATE_PREFETCH = \"prefetch\";\nvar CACHE_STATE_WRITE = \"write\";\n\n// DataCacheOperation state machine states.\n// Transitions on operations also depend on the cache current of the cache.\nvar OPERATION_STATE_CANCEL = \"cancel\";\nvar OPERATION_STATE_END = \"end\";\nvar OPERATION_STATE_ERROR = \"error\";\nvar OPERATION_STATE_START = \"start\";\nvar OPERATION_STATE_WAIT = \"wait\";\n\n// Destroy state machine states\nvar DESTROY_STATE_CLEAR = \"clear\";\n\n// Read / Prefetch state machine states\nvar READ_STATE_DONE = \"done\";\nvar READ_STATE_LOCAL = \"local\";\nvar READ_STATE_SAVE = \"save\";\nvar READ_STATE_SOURCE = \"source\";\n\n/** Creates a new operation object.\n * @class DataCacheOperation\n * @param {Function} stateMachine - State machine that describes the specific behavior of the operation.\n * @param {DjsDeferred} promise - Promise for requested values.\n * @param {Boolean} isCancelable - Whether this operation can be canceled or not.\n * @param {Number} index - Index of first item requested.\n * @param {Number} count - Count of items requested.\n * @param {Array} data - Array with the items requested by the operation.\n * @param {Number} pending - Total number of pending prefetch records.\n * @returns {DataCacheOperation} A new data cache operation instance.\n */\nfunction DataCacheOperation(stateMachine, promise, isCancelable, index, count, data, pending) {\n\n var stateData;\n var cacheState;\n var that = this;\n\n that.p = promise;\n that.i = index;\n that.c = count;\n that.d = data;\n that.s = OPERATION_STATE_START;\n\n that.canceled = false;\n that.pending = pending;\n that.oncomplete = null;\n\n /** Transitions this operation to the cancel state and sets the canceled flag to true.\n * The function is a no-op if the operation is non-cancelable.\n * @method DataCacheOperation#cancel\n */\n that.cancel = function cancel() {\n\n if (!isCancelable) {\n return;\n }\n\n var state = that.s;\n if (state !== OPERATION_STATE_ERROR && state !== OPERATION_STATE_END && state !== OPERATION_STATE_CANCEL) {\n that.canceled = true;\n that.transition(OPERATION_STATE_CANCEL, stateData);\n }\n };\n\n /** Transitions this operation to the end state.\n * @method DataCacheOperation#complete\n */\n that.complete = function () {\n\n djsassert(that.s !== OPERATION_STATE_END, \"DataCacheOperation.complete() - operation is in the end state\", that);\n that.transition(OPERATION_STATE_END, stateData);\n };\n\n /** Transitions this operation to the error state.\n * @method DataCacheOperation#error\n */\n that.error = function (err) {\n if (!that.canceled) {\n djsassert(that.s !== OPERATION_STATE_END, \"DataCacheOperation.error() - operation is in the end state\", that);\n djsassert(that.s !== OPERATION_STATE_ERROR, \"DataCacheOperation.error() - operation is in the error state\", that);\n that.transition(OPERATION_STATE_ERROR, err);\n }\n };\n\n /** Executes the operation's current state in the context of a new cache state.\n * @method DataCacheOperation#run\n * @param {Object} state - New cache state.\n */\n that.run = function (state) {\n\n cacheState = state;\n that.transition(that.s, stateData);\n };\n\n /** Transitions this operation to the wait state.\n * @method DataCacheOperation#wait\n */\n that.wait = function (data) {\n\n djsassert(that.s !== OPERATION_STATE_END, \"DataCacheOperation.wait() - operation is in the end state\", that);\n that.transition(OPERATION_STATE_WAIT, data);\n };\n\n /** State machine that describes all operations common behavior.\n * @method DataCacheOperation#operationStateMachine\n * @param {Object} opTargetState - Operation state to transition to.\n * @param {Object} cacheState - Current cache state.\n * @param {Object} [data] - Additional data passed to the state.\n */\n var operationStateMachine = function (opTargetState, cacheState, data) {\n\n switch (opTargetState) {\n case OPERATION_STATE_START:\n // Initial state of the operation. The operation will remain in this state until the cache has been fully initialized.\n if (cacheState !== CACHE_STATE_INIT) {\n stateMachine(that, opTargetState, cacheState, data);\n }\n break;\n\n case OPERATION_STATE_WAIT:\n // Wait state indicating that the operation is active but waiting for an asynchronous operation to complete.\n stateMachine(that, opTargetState, cacheState, data);\n break;\n\n case OPERATION_STATE_CANCEL:\n // Cancel state.\n stateMachine(that, opTargetState, cacheState, data);\n that.fireCanceled();\n that.transition(OPERATION_STATE_END);\n break;\n\n case OPERATION_STATE_ERROR:\n // Error state. Data is expected to be an object detailing the error condition.\n stateMachine(that, opTargetState, cacheState, data);\n that.canceled = true;\n that.fireRejected(data);\n that.transition(OPERATION_STATE_END);\n break;\n\n case OPERATION_STATE_END:\n // Final state of the operation.\n if (that.oncomplete) {\n that.oncomplete(that);\n }\n if (!that.canceled) {\n that.fireResolved();\n }\n stateMachine(that, opTargetState, cacheState, data);\n break;\n\n default:\n // Any other state is passed down to the state machine describing the operation's specific behavior.\n\n if (true) {\n // Check that the state machine actually handled the sate.\n var handled = stateMachine(that, opTargetState, cacheState, data);\n djsassert(handled, \"Bad operation state: \" + opTargetState + \" cacheState: \" + cacheState, this);\n } else {\n\n stateMachine(that, opTargetState, cacheState, data);\n\n }\n\n break;\n }\n };\n\n\n\n /** Transitions this operation to a new state.\n * @method DataCacheOperation#transition\n * @param {Object} state - State to transition the operation to.\n * @param {Object} [data] - \n */\n that.transition = function (state, data) {\n that.s = state;\n stateData = data;\n operationStateMachine(state, cacheState, data);\n };\n \n return that;\n}\n\n/** Fires a resolved notification as necessary.\n * @method DataCacheOperation#fireResolved\n */\nDataCacheOperation.prototype.fireResolved = function () {\n\n // Fire the resolve just once.\n var p = this.p;\n if (p) {\n this.p = null;\n p.resolve(this.d);\n }\n};\n\n/** Fires a rejected notification as necessary.\n * @method DataCacheOperation#fireRejected\n */\nDataCacheOperation.prototype.fireRejected = function (reason) {\n\n // Fire the rejection just once.\n var p = this.p;\n if (p) {\n this.p = null;\n p.reject(reason);\n }\n};\n\n/** Fires a canceled notification as necessary.\n * @method DataCacheOperation#fireCanceled\n */\nDataCacheOperation.prototype.fireCanceled = function () {\n\n this.fireRejected({ canceled: true, message: \"Operation canceled\" });\n};\n\n\n/** Creates a data cache for a collection that is efficiently loaded on-demand.\n * @class DataCache\n * @param options - Options for the data cache, including name, source, pageSize,\n * prefetchSize, cacheSize, storage mechanism, and initial prefetch and local-data handler.\n * @returns {DataCache} A new data cache instance.\n */\nfunction DataCache(options) {\n\n var state = CACHE_STATE_INIT;\n var stats = { counts: 0, netReads: 0, prefetches: 0, cacheReads: 0 };\n\n var clearOperations = [];\n var readOperations = [];\n var prefetchOperations = [];\n\n var actualCacheSize = 0; // Actual cache size in bytes.\n var allDataLocal = false; // Whether all data is local.\n var cacheSize = undefinedDefault(options.cacheSize, 1048576); // Requested cache size in bytes, default 1 MB.\n var collectionCount = 0; // Number of elements in the server collection.\n var highestSavedPage = 0; // Highest index of all the saved pages.\n var highestSavedPageSize = 0; // Item count of the saved page with the highest index.\n var overflowed = cacheSize === 0; // If the cache has overflowed (actualCacheSize > cacheSize or cacheSize == 0);\n var pageSize = undefinedDefault(options.pageSize, 50); // Number of elements to store per page.\n var prefetchSize = undefinedDefault(options.prefetchSize, pageSize); // Number of elements to prefetch from the source when the cache is idling.\n var version = \"1.0\";\n var cacheFailure;\n\n var pendingOperations = 0;\n\n var source = options.source;\n if (typeof source === \"string\") {\n // Create a new cache source.\n source = new cacheSource.ODataCacheSource(options);\n }\n source.options = options;\n\n // Create a cache local store.\n var store = storeReq.createStore(options.name, options.mechanism);\n\n var that = this;\n\n that.onidle = options.idle;\n that.stats = stats;\n\n /** Counts the number of items in the collection.\n * @method DataCache#count\n * @returns {Object} A promise with the number of items.\n */\n that.count = function () {\n\n if (cacheFailure) {\n throw cacheFailure;\n }\n\n var deferred = createDeferred();\n var canceled = false;\n\n if (allDataLocal) {\n delay(function () {\n deferred.resolve(collectionCount);\n });\n\n return deferred.promise();\n }\n\n // TODO: Consider returning the local data count instead once allDataLocal flag is set to true.\n var request = source.count(function (count) {\n request = null;\n stats.counts++;\n deferred.resolve(count);\n }, function (err) {\n request = null;\n deferred.reject(extend(err, { canceled: canceled }));\n });\n\n return extend(deferred.promise(), {\n\n /** Aborts the count operation (used within promise callback)\n * @method DataCache#cancelCount\n */\n cancel: function () {\n \n if (request) {\n canceled = true;\n request.abort();\n request = null;\n }\n }\n });\n };\n\n /** Cancels all running operations and clears all local data associated with this cache.\n * New read requests made while a clear operation is in progress will not be canceled.\n * Instead they will be queued for execution once the operation is completed.\n * @method DataCache#clear\n * @returns {Object} A promise that has no value and can't be canceled.\n */\n that.clear = function () {\n\n if (cacheFailure) {\n throw cacheFailure;\n }\n\n if (clearOperations.length === 0) {\n var deferred = createDeferred();\n var op = new DataCacheOperation(destroyStateMachine, deferred, false);\n queueAndStart(op, clearOperations);\n return deferred.promise();\n }\n return clearOperations[0].p;\n };\n\n /** Filters the cache data based a predicate.\n * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.\n * @method DataCache#filterForward\n * @param {Number} index - The index of the item to start filtering forward from.\n * @param {Number} count - Maximum number of items to include in the result.\n * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.\n * @returns {DjsDeferred} A promise for an array of results.\n */\n that.filterForward = function (index, count, predicate) {\n return filter(index, count, predicate, false);\n };\n\n /** Filters the cache data based a predicate.\n * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.\n * @method DataCache#filterBack\n * @param {Number} index - The index of the item to start filtering backward from.\n * @param {Number} count - Maximum number of items to include in the result.\n * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.\n * @returns {DjsDeferred} A promise for an array of results.\n */\n that.filterBack = function (index, count, predicate) {\n return filter(index, count, predicate, true);\n };\n\n /** Reads a range of adjacent records.\n * New read requests made while a clear operation is in progress will not be canceled.\n * Instead they will be queued for execution once the operation is completed.\n * @method DataCache#readRange\n * @param {Number} index - Zero-based index of record range to read.\n * @param {Number} count - Number of records in the range.\n * @returns {DjsDeferred} A promise for an array of records; less records may be returned if the\n * end of the collection is found.\n */\n that.readRange = function (index, count) {\n\n checkZeroGreater(index, \"index\");\n checkZeroGreater(count, \"count\");\n\n if (cacheFailure) {\n throw cacheFailure;\n }\n\n var deferred = createDeferred();\n\n // Merging read operations would be a nice optimization here.\n var op = new DataCacheOperation(readStateMachine, deferred, true, index, count, {}, 0);\n queueAndStart(op, readOperations);\n\n return extend(deferred.promise(), {\n cancel: function () {\n /** Aborts the readRange operation (used within promise callback)\n * @method DataCache#cancelReadRange\n */\n op.cancel();\n }\n });\n };\n\n /** Creates an Observable object that enumerates all the cache contents.\n * @method DataCache#toObservable\n * @returns A new Observable object that enumerates all the cache contents.\n */\n that.ToObservable = that.toObservable = function () {\n if ( !utils.inBrowser()) {\n throw { message: \"Only in broser supported\" };\n }\n\n if (!window.Rx || !window.Rx.Observable) {\n throw { message: \"Rx library not available - include rx.js\" };\n }\n\n if (cacheFailure) {\n throw cacheFailure;\n }\n\n //return window.Rx.Observable.create(function (obs) {\n return new window.Rx.Observable(function (obs) {\n var disposed = false;\n var index = 0;\n\n var errorCallback = function (error) {\n if (!disposed) {\n obs.onError(error);\n }\n };\n\n var successCallback = function (data) {\n if (!disposed) {\n var i, len;\n for (i = 0, len = data.value.length; i < len; i++) {\n // The wrapper automatically checks for Dispose\n // on the observer, so we don't need to check it here.\n //obs.next(data.value[i]);\n obs.onNext(data.value[i]);\n }\n\n if (data.value.length < pageSize) {\n //obs.completed();\n obs.onCompleted();\n } else {\n index += pageSize;\n that.readRange(index, pageSize).then(successCallback, errorCallback);\n }\n }\n };\n\n that.readRange(index, pageSize).then(successCallback, errorCallback);\n\n return { Dispose: function () { \n obs.dispose(); // otherwise the check isStopped obs.onNext(data.value[i]);\n disposed = true; \n } };\n });\n };\n\n /** Creates a function that handles a callback by setting the cache into failure mode.\n * @method DataCache~cacheFailureCallback\n * @param {String} message - Message text.\n * @returns {Function} Function to use as error callback.\n * This function will specifically handle problems with critical store resources\n * during cache initialization.\n */\n var cacheFailureCallback = function (message) {\n \n\n return function (error) {\n cacheFailure = { message: message, error: error };\n\n // Destroy any pending clear or read operations.\n // At this point there should be no prefetch operations.\n // Count operations will go through but are benign because they\n // won't interact with the store.\n djsassert(prefetchOperations.length === 0, \"prefetchOperations.length === 0\");\n var i, len;\n for (i = 0, len = readOperations.length; i < len; i++) {\n readOperations[i].fireRejected(cacheFailure);\n }\n for (i = 0, len = clearOperations.length; i < len; i++) {\n clearOperations[i].fireRejected(cacheFailure);\n }\n\n // Null out the operation arrays.\n readOperations = clearOperations = null;\n };\n };\n\n /** Updates the cache's state and signals all pending operations of the change.\n * @method DataCache~changeState\n * @param {Object} newState - New cache state.\n * This method is a no-op if the cache's current state and the new state are the same.\n */\n var changeState = function (newState) {\n\n if (newState !== state) {\n state = newState;\n var operations = clearOperations.concat(readOperations, prefetchOperations);\n var i, len;\n for (i = 0, len = operations.length; i < len; i++) {\n operations[i].run(state);\n }\n }\n };\n\n /** Removes all the data stored in the cache.\n * @method DataCache~clearStore\n * @returns {DjsDeferred} A promise with no value.\n */\n var clearStore = function () {\n djsassert(state === CACHE_STATE_DESTROY || state === CACHE_STATE_INIT, \"DataCache.clearStore() - cache is not on the destroy or initialize state, current sate = \" + state);\n\n var deferred = new DjsDeferred();\n store.clear(function () {\n\n // Reset the cache settings.\n actualCacheSize = 0;\n allDataLocal = false;\n collectionCount = 0;\n highestSavedPage = 0;\n highestSavedPageSize = 0;\n overflowed = cacheSize === 0;\n\n // version is not reset, in case there is other state in eg V1.1 that is still around.\n\n // Reset the cache stats.\n stats = { counts: 0, netReads: 0, prefetches: 0, cacheReads: 0 };\n that.stats = stats;\n\n store.close();\n deferred.resolve();\n }, function (err) {\n deferred.reject(err);\n });\n return deferred;\n };\n\n /** Removes an operation from the caches queues and changes the cache state to idle.\n * @method DataCache~dequeueOperation\n * @param {DataCacheOperation} operation - Operation to dequeue.\n * This method is used as a handler for the operation's oncomplete event.\n */\n var dequeueOperation = function (operation) {\n\n var removed = removeFromArray(clearOperations, operation);\n if (!removed) {\n removed = removeFromArray(readOperations, operation);\n if (!removed) {\n removeFromArray(prefetchOperations, operation);\n }\n }\n\n pendingOperations--;\n changeState(CACHE_STATE_IDLE);\n };\n\n /** Requests data from the cache source.\n * @method DataCache~fetchPage\n * @param {Number} start - Zero-based index of items to request.\n * @returns {DjsDeferred} A promise for a page object with (i)ndex, (c)ount, (d)ata.\n */\n var fetchPage = function (start) {\n\n djsassert(state !== CACHE_STATE_DESTROY, \"DataCache.fetchPage() - cache is on the destroy state\");\n djsassert(state !== CACHE_STATE_IDLE, \"DataCache.fetchPage() - cache is on the idle state\");\n\n var deferred = new DjsDeferred();\n var canceled = false;\n\n var request = source.read(start, pageSize, function (data) {\n var length = getJsonValueArraryLength(data);\n var page = { i: start, c: length, d: data };\n deferred.resolve(page);\n }, function (err) {\n deferred.reject(err);\n });\n\n return extend(deferred, {\n cancel: function () {\n if (request) {\n request.abort();\n canceled = true;\n request = null;\n }\n }\n });\n };\n\n /** Filters the cache data based a predicate.\n * @method DataCache~filter\n * @param {Number} index - The index of the item to start filtering from.\n * @param {Number} count - Maximum number of items to include in the result.\n * @param {Function} predicate - Callback function returning a boolean that determines whether an item should be included in the result or not.\n * @param {Boolean} backwards - True if the filtering should move backward from the specified index, falsey otherwise.\n * Specifying a negative count value will yield all the items in the cache that satisfy the predicate.\n * @returns {DjsDeferred} A promise for an array of results.\n */\n var filter = function (index, count, predicate, backwards) {\n\n index = parseInt10(index);\n count = parseInt10(count);\n\n if (isNaN(index)) {\n throw { message: \"'index' must be a valid number.\", index: index };\n }\n if (isNaN(count)) {\n throw { message: \"'count' must be a valid number.\", count: count };\n }\n\n if (cacheFailure) {\n throw cacheFailure;\n }\n\n index = Math.max(index, 0);\n\n var deferred = createDeferred();\n var returnData = {};\n returnData.value = [];\n var canceled = false;\n var pendingReadRange = null;\n\n var readMore = function (readIndex, readCount) {\n if (!canceled) {\n if (count > 0 && returnData.value.length >= count) {\n deferred.resolve(returnData);\n } else {\n pendingReadRange = that.readRange(readIndex, readCount).then(function (data) {\n if (data[\"@odata.context\"] && !returnData[\"@odata.context\"]) {\n returnData[\"@odata.context\"] = data[\"@odata.context\"];\n }\n \n for (var i = 0, length = data.value.length; i < length && (count < 0 || returnData.value.length < count); i++) {\n var dataIndex = backwards ? length - i - 1 : i;\n var item = data.value[dataIndex];\n if (predicate(item)) {\n var element = {\n index: readIndex + dataIndex,\n item: item\n };\n\n backwards ? returnData.value.unshift(element) : returnData.value.push(element);\n }\n }\n\n // Have we reached the end of the collection?\n if ((!backwards && data.value.length < readCount) || (backwards && readIndex <= 0)) {\n deferred.resolve(returnData);\n } else {\n var nextIndex = backwards ? Math.max(readIndex - pageSize, 0) : readIndex + readCount;\n readMore(nextIndex, pageSize);\n }\n }, function (err) {\n deferred.reject(err);\n });\n }\n }\n };\n\n // Initially, we read from the given starting index to the next/previous page boundary\n var initialPage = snapToPageBoundaries(index, index, pageSize);\n var initialIndex = backwards ? initialPage.i : index;\n var initialCount = backwards ? index - initialPage.i + 1 : initialPage.i + initialPage.c - index;\n readMore(initialIndex, initialCount);\n\n return extend(deferred.promise(), {\n /** Aborts the filter operation (used within promise callback)\n * @method DataCache#cancelFilter\n */\n cancel: function () {\n\n if (pendingReadRange) {\n pendingReadRange.cancel();\n }\n canceled = true;\n }\n });\n };\n\n /** Fires an onidle event if any functions are assigned.\n * @method DataCache~fireOnIdle\n */\n var fireOnIdle = function () {\n\n if (that.onidle && pendingOperations === 0) {\n that.onidle();\n }\n };\n\n /** Creates and starts a new prefetch operation.\n * @method DataCache~prefetch\n * @param {Number} start - Zero-based index of the items to prefetch.\n * This method is a no-op if any of the following conditions is true:\n * 1.- prefetchSize is 0\n * 2.- All data has been read and stored locally in the cache.\n * 3.- There is already an all data prefetch operation queued.\n * 4.- The cache has run out of available space (overflowed).\n */\n var prefetch = function (start) {\n \n\n if (allDataLocal || prefetchSize === 0 || overflowed) {\n return;\n }\n\n djsassert(state === CACHE_STATE_READ, \"DataCache.prefetch() - cache is not on the read state, current state: \" + state);\n\n if (prefetchOperations.length === 0 || (prefetchOperations[0] && prefetchOperations[0].c !== -1)) {\n // Merging prefetch operations would be a nice optimization here.\n var op = new DataCacheOperation(prefetchStateMachine, null, true, start, prefetchSize, null, prefetchSize);\n queueAndStart(op, prefetchOperations);\n }\n };\n\n /** Queues an operation and runs it.\n * @param {DataCacheOperation} op - Operation to queue.\n * @param {Array} queue - Array that will store the operation.\n */\n var queueAndStart = function (op, queue) {\n\n op.oncomplete = dequeueOperation;\n queue.push(op);\n pendingOperations++;\n op.run(state);\n };\n\n /** Requests a page from the cache local store.\n * @method DataCache~readPage \n * @param {Number} key - Zero-based index of the reuqested page.\n * @returns {DjsDeferred} A promise for a found flag and page object with (i)ndex, (c)ount, (d)ata, and (t)icks.\n */\n var readPage = function (key) {\n\n djsassert(state !== CACHE_STATE_DESTROY, \"DataCache.readPage() - cache is on the destroy state\");\n\n var canceled = false;\n var deferred = extend(new DjsDeferred(), {\n /** Aborts the readPage operation. (used within promise callback)\n * @method DataCache#cancelReadPage\n */\n cancel: function () {\n canceled = true;\n }\n });\n\n var error = storeFailureCallback(deferred, \"Read page from store failure\");\n\n store.contains(key, function (contained) {\n if (canceled) {\n return;\n }\n if (contained) {\n store.read(key, function (_, data) {\n if (!canceled) {\n deferred.resolve(data !== undefined, data);\n }\n }, error);\n return;\n }\n deferred.resolve(false);\n }, error);\n return deferred;\n };\n\n /** Saves a page to the cache local store.\n * @method DataCache~savePage \n * @param {Number} key - Zero-based index of the requested page.\n * @param {Object} page - Object with (i)ndex, (c)ount, (d)ata, and (t)icks.\n * @returns {DjsDeferred} A promise with no value.\n */\n var savePage = function (key, page) {\n\n djsassert(state !== CACHE_STATE_DESTROY, \"DataCache.savePage() - cache is on the destroy state\");\n djsassert(state !== CACHE_STATE_IDLE, \"DataCache.savePage() - cache is on the idle state\");\n\n var canceled = false;\n\n var deferred = extend(new DjsDeferred(), {\n /** Aborts the savePage operation. (used within promise callback)\n * @method DataCache#cancelReadPage\n */\n cancel: function () {\n canceled = true;\n }\n });\n\n var error = storeFailureCallback(deferred, \"Save page to store failure\");\n\n var resolve = function () {\n deferred.resolve(true);\n };\n\n if (page.c > 0) {\n var pageBytes = estimateSize(page);\n overflowed = cacheSize >= 0 && cacheSize < actualCacheSize + pageBytes;\n\n if (!overflowed) {\n store.addOrUpdate(key, page, function () {\n updateSettings(page, pageBytes);\n saveSettings(resolve, error);\n }, error);\n } else {\n resolve();\n }\n } else {\n updateSettings(page, 0);\n saveSettings(resolve, error);\n }\n return deferred;\n };\n\n /** Saves the cache's current settings to the local store.\n * @method DataCache~saveSettings \n * @param {Function} success - Success callback.\n * @param {Function} error - Errror callback.\n */\n var saveSettings = function (success, error) {\n\n var settings = {\n actualCacheSize: actualCacheSize,\n allDataLocal: allDataLocal,\n cacheSize: cacheSize,\n collectionCount: collectionCount,\n highestSavedPage: highestSavedPage,\n highestSavedPageSize: highestSavedPageSize,\n pageSize: pageSize,\n sourceId: source.identifier,\n version: version\n };\n\n store.addOrUpdate(\"__settings\", settings, success, error);\n };\n\n /** Creates a function that handles a store error.\n * @method DataCache~storeFailureCallback \n * @param {DjsDeferred} deferred - Deferred object to resolve.\n * @returns {Function} Function to use as error callback.\n \n * This function will specifically handle problems when interacting with the store.\n */\n var storeFailureCallback = function (deferred/*, message*/) {\n \n\n return function (/*error*/) {\n // var console = windo1w.console;\n // if (console && console.log) {\n // console.log(message);\n // console.dir(error);\n // }\n deferred.resolve(false);\n };\n };\n\n /** Updates the cache's settings based on a page object.\n * @method DataCache~updateSettings \n * @param {Object} page - Object with (i)ndex, (c)ount, (d)ata.\n * @param {Number} pageBytes - Size of the page in bytes.\n */\n var updateSettings = function (page, pageBytes) {\n\n var pageCount = page.c;\n var pageIndex = page.i;\n\n // Detect the collection size.\n if (pageCount === 0) {\n if (highestSavedPage === pageIndex - pageSize) {\n collectionCount = highestSavedPage + highestSavedPageSize;\n }\n } else {\n highestSavedPage = Math.max(highestSavedPage, pageIndex);\n if (highestSavedPage === pageIndex) {\n highestSavedPageSize = pageCount;\n }\n actualCacheSize += pageBytes;\n if (pageCount < pageSize && !collectionCount) {\n collectionCount = pageIndex + pageCount;\n }\n }\n\n // Detect the end of the collection.\n if (!allDataLocal && collectionCount === highestSavedPage + highestSavedPageSize) {\n allDataLocal = true;\n }\n };\n\n /** State machine describing the behavior for cancelling a read or prefetch operation.\n * @method DataCache~cancelStateMachine \n * @param {DataCacheOperation} operation - Operation being run.\n * @param {Object} opTargetState - Operation state to transition to.\n * @param {Object} cacheState - Current cache state.\n * @param {Object} [data] - \n * This state machine contains behavior common to read and prefetch operations.\n */\n var cancelStateMachine = function (operation, opTargetState, cacheState, data) {\n \n\n var canceled = operation.canceled && opTargetState !== OPERATION_STATE_END;\n if (canceled) {\n if (opTargetState === OPERATION_STATE_CANCEL) {\n // Cancel state.\n // Data is expected to be any pending request made to the cache.\n if (data && data.cancel) {\n data.cancel();\n }\n }\n }\n return canceled;\n };\n\n /** State machine describing the behavior of a clear operation.\n * @method DataCache~destroyStateMachine \n * @param {DataCacheOperation} operation - Operation being run.\n * @param {Object} opTargetState - Operation state to transition to.\n * @param {Object} cacheState - Current cache state.\n \n * Clear operations have the highest priority and can't be interrupted by other operations; however,\n * they will preempt any other operation currently executing.\n */\n var destroyStateMachine = function (operation, opTargetState, cacheState) {\n \n\n var transition = operation.transition;\n\n // Signal the cache that a clear operation is running.\n if (cacheState !== CACHE_STATE_DESTROY) {\n changeState(CACHE_STATE_DESTROY);\n return true;\n }\n\n switch (opTargetState) {\n case OPERATION_STATE_START:\n // Initial state of the operation.\n transition(DESTROY_STATE_CLEAR);\n break;\n\n case OPERATION_STATE_END:\n // State that signals the operation is done.\n fireOnIdle();\n break;\n\n case DESTROY_STATE_CLEAR:\n // State that clears all the local data of the cache.\n clearStore().then(function () {\n // Terminate the operation once the local store has been cleared.\n operation.complete();\n });\n // Wait until the clear request completes.\n operation.wait();\n break;\n\n default:\n return false;\n }\n return true;\n };\n\n /** State machine describing the behavior of a prefetch operation.\n * @method DataCache~prefetchStateMachine \n * @param {DataCacheOperation} operation - Operation being run.\n * @param {Object} opTargetState - Operation state to transition to.\n * @param {Object} cacheState - Current cache state.\n * @param {Object} [data] - \n \n * Prefetch operations have the lowest priority and will be interrupted by operations of\n * other kinds. A preempted prefetch operation will resume its execution only when the state\n * of the cache returns to idle.\n * \n * If a clear operation starts executing then all the prefetch operations are canceled,\n * even if they haven't started executing yet.\n */\n var prefetchStateMachine = function (operation, opTargetState, cacheState, data) {\n \n\n // Handle cancelation\n if (!cancelStateMachine(operation, opTargetState, cacheState, data)) {\n\n var transition = operation.transition;\n\n // Handle preemption\n if (cacheState !== CACHE_STATE_PREFETCH) {\n if (cacheState === CACHE_STATE_DESTROY) {\n if (opTargetState !== OPERATION_STATE_CANCEL) {\n operation.cancel();\n }\n } else if (cacheState === CACHE_STATE_IDLE) {\n // Signal the cache that a prefetch operation is running.\n changeState(CACHE_STATE_PREFETCH);\n }\n return true;\n }\n\n switch (opTargetState) {\n case OPERATION_STATE_START:\n // Initial state of the operation.\n if (prefetchOperations[0] === operation) {\n transition(READ_STATE_LOCAL, operation.i);\n }\n break;\n\n case READ_STATE_DONE:\n // State that determines if the operation can be resolved or has to\n // continue processing.\n // Data is expected to be the read page.\n var pending = operation.pending;\n\n if (pending > 0) {\n pending -= Math.min(pending, data.c);\n }\n\n // Are we done, or has all the data been stored?\n if (allDataLocal || pending === 0 || data.c < pageSize || overflowed) {\n operation.complete();\n } else {\n // Continue processing the operation.\n operation.pending = pending;\n transition(READ_STATE_LOCAL, data.i + pageSize);\n }\n break;\n\n default:\n return readSaveStateMachine(operation, opTargetState, cacheState, data, true);\n }\n }\n return true;\n };\n\n /** State machine describing the behavior of a read operation.\n * @method DataCache~readStateMachine \n * @param {DataCacheOperation} operation - Operation being run.\n * @param {Object} opTargetState - Operation state to transition to.\n * @param {Object} cacheState - Current cache state.\n * @param {Object} [data] - \n \n * Read operations have a higher priority than prefetch operations, but lower than\n * clear operations. They will preempt any prefetch operation currently running\n * but will be interrupted by a clear operation.\n * \n * If a clear operation starts executing then all the currently running\n * read operations are canceled. Read operations that haven't started yet will\n * wait in the start state until the destory operation finishes.\n */\n var readStateMachine = function (operation, opTargetState, cacheState, data) {\n \n\n // Handle cancelation\n if (!cancelStateMachine(operation, opTargetState, cacheState, data)) {\n\n var transition = operation.transition;\n\n // Handle preemption\n if (cacheState !== CACHE_STATE_READ && opTargetState !== OPERATION_STATE_START) {\n if (cacheState === CACHE_STATE_DESTROY) {\n if (opTargetState !== OPERATION_STATE_START) {\n operation.cancel();\n }\n } else if (cacheState !== CACHE_STATE_WRITE) {\n // Signal the cache that a read operation is running.\n djsassert(state == CACHE_STATE_IDLE || state === CACHE_STATE_PREFETCH, \"DataCache.readStateMachine() - cache is not on the read or idle state.\");\n changeState(CACHE_STATE_READ);\n }\n\n return true;\n }\n\n switch (opTargetState) {\n case OPERATION_STATE_START:\n // Initial state of the operation.\n // Wait until the cache is idle or prefetching.\n if (cacheState === CACHE_STATE_IDLE || cacheState === CACHE_STATE_PREFETCH) {\n // Signal the cache that a read operation is running.\n changeState(CACHE_STATE_READ);\n if (operation.c >= 0) {\n // Snap the requested range to a page boundary.\n var range = snapToPageBoundaries(operation.i, operation.c, pageSize);\n transition(READ_STATE_LOCAL, range.i);\n } else {\n transition(READ_STATE_DONE, operation);\n }\n }\n break;\n\n case READ_STATE_DONE:\n // State that determines if the operation can be resolved or has to\n // continue processing.\n // Data is expected to be the read page.\n appendPage(operation, data);\n var len = getJsonValueArraryLength(operation.d);\n // Are we done?\n if (operation.c === len || data.c < pageSize) {\n // Update the stats, request for a prefetch operation.\n stats.cacheReads++;\n prefetch(data.i + data.c);\n // Terminate the operation.\n operation.complete();\n } else {\n // Continue processing the operation.\n transition(READ_STATE_LOCAL, data.i + pageSize);\n }\n break;\n\n default:\n return readSaveStateMachine(operation, opTargetState, cacheState, data, false);\n }\n }\n\n return true;\n };\n\n /** State machine describing the behavior for reading and saving data into the cache.\n * @method DataCache~readSaveStateMachine \n * @param {DataCacheOperation} operation - Operation being run.\n * @param {Object} opTargetState - Operation state to transition to.\n * @param {Object} cacheState - Current cache state.\n * @param {Object} [data] - \n * @param {Boolean} isPrefetch - Flag indicating whether a read (false) or prefetch (true) operation is running.\n * This state machine contains behavior common to read and prefetch operations.\n */\n var readSaveStateMachine = function (operation, opTargetState, cacheState, data, isPrefetch) {\n\n var error = operation.error;\n var transition = operation.transition;\n var wait = operation.wait;\n var request;\n\n switch (opTargetState) {\n case OPERATION_STATE_END:\n // State that signals the operation is done.\n fireOnIdle();\n break;\n\n case READ_STATE_LOCAL:\n // State that requests for a page from the local store.\n // Data is expected to be the index of the page to request.\n request = readPage(data).then(function (found, page) {\n // Signal the cache that a read operation is running.\n if (!operation.canceled) {\n if (found) {\n // The page is in the local store, check if the operation can be resolved.\n transition(READ_STATE_DONE, page);\n } else {\n // The page is not in the local store, request it from the source.\n transition(READ_STATE_SOURCE, data);\n }\n }\n });\n break;\n\n case READ_STATE_SOURCE:\n // State that requests for a page from the cache source.\n // Data is expected to be the index of the page to request.\n request = fetchPage(data).then(function (page) {\n // Signal the cache that a read operation is running.\n if (!operation.canceled) {\n // Update the stats and save the page to the local store.\n if (isPrefetch) {\n stats.prefetches++;\n } else {\n stats.netReads++;\n }\n transition(READ_STATE_SAVE, page);\n }\n }, error);\n break;\n\n case READ_STATE_SAVE:\n // State that saves a page to the local store.\n // Data is expected to be the page to save.\n // Write access to the store is exclusive.\n if (cacheState !== CACHE_STATE_WRITE) {\n changeState(CACHE_STATE_WRITE);\n request = savePage(data.i, data).then(function (saved) {\n if (!operation.canceled) {\n if (!saved && isPrefetch) {\n operation.pending = 0;\n }\n // Check if the operation can be resolved.\n transition(READ_STATE_DONE, data);\n }\n changeState(CACHE_STATE_IDLE);\n });\n }\n break;\n\n default:\n // Unknown state that can't be handled by this state machine.\n return false;\n }\n\n if (request) {\n // The operation might have been canceled between stack frames do to the async calls.\n if (operation.canceled) {\n request.cancel();\n } else if (operation.s === opTargetState) {\n // Wait for the request to complete.\n wait(request);\n }\n }\n\n return true;\n };\n\n // Initialize the cache.\n store.read(\"__settings\", function (_, settings) {\n if (assigned(settings)) {\n var settingsVersion = settings.version;\n if (!settingsVersion || settingsVersion.indexOf(\"1.\") !== 0) {\n cacheFailureCallback(\"Unsupported cache store version \" + settingsVersion)();\n return;\n }\n\n if (pageSize !== settings.pageSize || source.identifier !== settings.sourceId) {\n // The shape or the source of the data was changed so invalidate the store.\n clearStore().then(function () {\n // Signal the cache is fully initialized.\n changeState(CACHE_STATE_IDLE);\n }, cacheFailureCallback(\"Unable to clear store during initialization\"));\n } else {\n // Restore the saved settings.\n actualCacheSize = settings.actualCacheSize;\n allDataLocal = settings.allDataLocal;\n cacheSize = settings.cacheSize;\n collectionCount = settings.collectionCount;\n highestSavedPage = settings.highestSavedPage;\n highestSavedPageSize = settings.highestSavedPageSize;\n version = settingsVersion;\n\n // Signal the cache is fully initialized.\n changeState(CACHE_STATE_IDLE);\n }\n } else {\n // This is a brand new cache.\n saveSettings(function () {\n // Signal the cache is fully initialized.\n changeState(CACHE_STATE_IDLE);\n }, cacheFailureCallback(\"Unable to write settings during initialization.\"));\n }\n }, cacheFailureCallback(\"Unable to read settings from store.\"));\n\n return that;\n}\n\n/** Creates a data cache for a collection that is efficiently loaded on-demand.\n * @param options \n * Options for the data cache, including name, source, pageSize, TODO check doku\n * prefetchSize, cacheSize, storage mechanism, and initial prefetch and local-data handler.\n * @returns {DataCache} A new data cache instance.\n */\nfunction createDataCache (options) {\n checkUndefinedGreaterThanZero(options.pageSize, \"pageSize\");\n checkUndefinedOrNumber(options.cacheSize, \"cacheSize\");\n checkUndefinedOrNumber(options.prefetchSize, \"prefetchSize\");\n\n if (!assigned(options.name)) {\n throw { message: \"Undefined or null name\", options: options };\n }\n\n if (!assigned(options.source)) {\n throw { message: \"Undefined source\", options: options };\n }\n\n return new DataCache(options);\n}\n\n\n/** estimateSize (see {@link estimateSize}) */\nexports.estimateSize = estimateSize;\n\n/** createDataCache */ \nexports.createDataCache = createDataCache;\n\n\n\n}, \"source\" : function(exports, module, require) {\n'use strict';\n\n /** @module cache/source */\n \nvar utils = require(\"./../utils.js\");\nvar odataRequest = require(\"./../odata.js\");\n\nvar parseInt10 = utils.parseInt10;\nvar normalizeURICase = utils.normalizeURICase;\n\n\n\n\n/** Appends the specified escaped query option to the specified URI.\n * @param {String} uri - URI to append option to.\n * @param {String} queryOption - Escaped query option to append.\n */\nfunction appendQueryOption(uri, queryOption) {\n var separator = (uri.indexOf(\"?\") >= 0) ? \"&\" : \"?\";\n return uri + separator + queryOption;\n}\n\n/** Appends the specified segment to the given URI.\n * @param {String} uri - URI to append a segment to.\n * @param {String} segment - Segment to append.\n * @returns {String} The original URI with a new segment appended.\n */\nfunction appendSegment(uri, segment) {\n var index = uri.indexOf(\"?\");\n var queryPortion = \"\";\n if (index >= 0) {\n queryPortion = uri.substr(index);\n uri = uri.substr(0, index);\n }\n\n if (uri[uri.length - 1] !== \"/\") {\n uri += \"/\";\n }\n return uri + segment + queryPortion;\n}\n\n/** Builds a request object to GET the specified URI.\n * @param {String} uri - URI for request.\n * @param {Object} options - Additional options.\n */\nfunction buildODataRequest(uri, options) {\n return {\n method: \"GET\",\n requestUri: uri,\n user: options.user,\n password: options.password,\n enableJsonpCallback: options.enableJsonpCallback,\n callbackParameterName: options.callbackParameterName,\n formatQueryString: options.formatQueryString\n };\n}\n\n/** Finds the index where the value of a query option starts.\n * @param {String} uri - URI to search in.\n * @param {String} name - Name to look for.\n * @returns {Number} The index where the query option starts.\n */\nfunction findQueryOptionStart(uri, name) {\n var result = -1;\n var queryIndex = uri.indexOf(\"?\");\n if (queryIndex !== -1) {\n var start = uri.indexOf(\"?\" + name + \"=\", queryIndex);\n if (start === -1) {\n start = uri.indexOf(\"&\" + name + \"=\", queryIndex);\n }\n if (start !== -1) {\n result = start + name.length + 2;\n }\n }\n return result;\n}\n\n/** Gets data from an OData service.\n * @param {String} uri - URI to the OData service.\n * @param {Object} options - Object with additional well-known request options.\n * @param {Function} success - Success callback.\n * @param {Function} error - Error callback.\n * @returns {Object} Object with an abort method.\n */\nfunction queryForData (uri, options, success, error) {\n return queryForDataInternal(uri, options, {}, success, error);\n}\n\n/** Gets data from an OData service taking into consideration server side paging.\n * @param {String} uri - URI to the OData service.\n * @param {Object} options - Object with additional well-known request options.\n * @param {Array} data - Array that stores the data provided by the OData service.\n * @param {Function} success - Success callback.\n * @param {Function} error - Error callback.\n * @returns {Object} Object with an abort method.\n */\nfunction queryForDataInternal(uri, options, data, success, error) {\n\n var request = buildODataRequest(uri, options);\n var currentRequest = odataRequest.request(request, function (newData) {\n var nextLink = newData[\"@odata.nextLink\"];\n if (nextLink) {\n var index = uri.indexOf(\".svc/\", 0);\n if (index != -1) {\n nextLink = uri.substring(0, index + 5) + nextLink;\n }\n }\n\n if (data.value && newData.value) {\n data.value = data.value.concat(newData.value);\n }\n else {\n for (var property in newData) {\n if (property != \"@odata.nextLink\") {\n data[property] = newData[property];\n }\n }\n }\n\n if (nextLink) {\n currentRequest = queryForDataInternal(nextLink, options, data, success, error);\n }\n else {\n success(data);\n }\n }, error, undefined, options.httpClient, options.metadata);\n\n return {\n abort: function () {\n currentRequest.abort();\n }\n };\n}\n\n/** Creates a data cache source object for requesting data from an OData service.\n * @class ODataCacheSource\n * @param options - Options for the cache data source.\n * @returns {ODataCacheSource} A new data cache source instance.\n */\nfunction ODataCacheSource (options) {\n var that = this;\n var uri = options.source;\n \n that.identifier = normalizeURICase(encodeURI(decodeURI(uri)));\n that.options = options;\n\n /** Gets the number of items in the collection.\n * @method ODataCacheSource#count\n * @param {Function} success - Success callback with the item count.\n * @param {Function} error - Error callback.\n * @returns {Object} Request object with an abort method.\n */\n that.count = function (success, error) {\n var options = that.options;\n return odataRequest.request(\n buildODataRequest(appendSegment(uri, \"$count\"), options),\n function (data) {\n var count = parseInt10(data.toString());\n if (isNaN(count)) {\n error({ message: \"Count is NaN\", count: count });\n } else {\n success(count);\n }\n }, error, undefined, options.httpClient, options.metadata\n );\n };\n \n /** Gets a number of consecutive items from the collection.\n * @method ODataCacheSource#read\n * @param {Number} index - Zero-based index of the items to retrieve.\n * @param {Number} count - Number of items to retrieve.\n * @param {Function} success - Success callback with the requested items.\n * @param {Function} error - Error callback.\n * @returns {Object} Request object with an abort method.\n */\n that.read = function (index, count, success, error) {\n\n var queryOptions = \"$skip=\" + index + \"&$top=\" + count;\n return queryForData(appendQueryOption(uri, queryOptions), that.options, success, error);\n };\n\n return that;\n}\n\n\n\n/** ODataCacheSource (see {@link ODataCacheSource}) */\nexports.ODataCacheSource = ODataCacheSource;}, \"deferred\" : function(exports, module, require) {\n'use strict';\n\n/** @module odatajs/deferred */\n\n\n\n/** Creates a new function to forward a call.\n * @param {Object} thisValue - Value to use as the 'this' object.\n * @param {String} name - Name of function to forward to.\n * @param {Object} returnValue - Return value for the forward call (helps keep identity when chaining calls).\n * @returns {Function} A new function that will forward a call.\n */\nfunction forwardCall(thisValue, name, returnValue) {\n return function () {\n thisValue[name].apply(thisValue, arguments);\n return returnValue;\n };\n}\n\n/** Initializes a new DjsDeferred object.\n *