X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=blobdiff_plain;f=skyquake%2Fframework%2Fsource%2Fschema%2FschemaSource.js;fp=skyquake%2Fframework%2Fsource%2Fschema%2FschemaSource.js;h=2c7bd5bcb2ca1e6cf6d0d558bc97e7189123e8d8;hp=0000000000000000000000000000000000000000;hb=03156e335275de1dafbc2a816e98006afdf249bf;hpb=f2dc2462571800e62cba969964de621dca09299c diff --git a/skyquake/framework/source/schema/schemaSource.js b/skyquake/framework/source/schema/schemaSource.js new file mode 100644 index 000000000..2c7bd5bcb --- /dev/null +++ b/skyquake/framework/source/schema/schemaSource.js @@ -0,0 +1,95 @@ +/* + * + * Copyright 2017 RIFT.IO Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import rw from 'utils/rw' +import schemaActions from './schemaActions' +import Utils from 'utils/utils' +import $ from 'jquery'; +import StoreCache from '../SourceCache' + +const storeCache = new StoreCache('schema'); +storeCache.init(); // get the ball rolling + +function getCachedSchema(request) { + const cachedSchema = {}; + const requestSchema = []; + request.forEach((path) => { + let schema = storeCache.get(path); + if (schema) { + cachedSchema[path] = schema + } else { + requestSchema.push(path); + } + }); + return { + cachedSchema, + requestSchema + }; +} + +const schemaSource = { + loadSchema: function () { + return { + local: function (state, request) { + request = Array.isArray(request) ? request : [request]; + const results = getCachedSchema(request); + if (!results.requestSchema.length) { + return(Promise.resolve(results.cachedSchema)); + } + }, + + remote: function (state, request) { + return new Promise(function (resolve, reject) { + storeCache.init().then(() => { + request = Array.isArray(request) ? request : [request]; + const results = getCachedSchema(request); + if (!results.requestSchema.length) { + resolve({ + schema: results.cachedSchema + }); + } else { + $.ajax({ + url: '/schema?request=' + results.requestSchema.join(','), + type: 'GET', + success: function ({ + schema + }) { + for (let path in schema) { + storeCache.set(path, schema[path]); + } + resolve(getCachedSchema(request).cachedSchema); + }, + error: function (error) { + console.log("There was an error getting the schema: ", error); + reject(error); + } + }).fail(function (xhr) { + console.log("There was an error getting the schema: ", xhr); + Utils.checkAuthentication(xhr.status); + reject("There was an error getting the schema.") + }); + } + }) + }) + }, + success: schemaActions.loadSchemaSuccess, + loading: schemaActions.loadSchemaLoading, + error: schemaActions.loadSchemaFail + } + }, +} +export default schemaSource; \ No newline at end of file