X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=skyquake%2Fframework%2Fcore%2Fmodules%2Fapi%2Fnavigation.js;fp=skyquake%2Fframework%2Fcore%2Fmodules%2Fapi%2Fnavigation.js;h=5f22835e9c73d0c1829d43eb3567d36db9c29f18;hb=e29efc315df33d546237e270470916e26df391d6;hp=0000000000000000000000000000000000000000;hpb=9c5e457509ba5a1822c316635c6308874e61b4b9;p=osm%2FUI.git diff --git a/skyquake/framework/core/modules/api/navigation.js b/skyquake/framework/core/modules/api/navigation.js new file mode 100644 index 000000000..5f22835e9 --- /dev/null +++ b/skyquake/framework/core/modules/api/navigation.js @@ -0,0 +1,136 @@ +/* + * + * Copyright 2016 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. + * + */ + +/** + * navigation api module. Provides API functions to interact with + * the navigation_manager + * @module framework/core/modules/api/navigation + * @author Kiran Kashalkar + */ + +var navigation_manager = require('../navigation_manager'); +var Promise = require('promise'); +var constants = require('../../api_utils/constants'); +var navigationAPI = {}; + +/** + * Get the navigation object stored in this instance + * @param {Object} req - the Express request object with or without a plugin_id + * @return {Function} Promise that resolves with success object or rejects + * with error + */ +navigationAPI.get = function(req) { + return new Promise(function(resolve, reject) { + if (req.params.plugin_id) { + var navigation = navigation_manager.getNavigation(); + if (navigation[req.params.plugin_id]) { + resolve({ + statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK, + data: navigation[req.params.plugin_id] + }); + } else { + reject({ + statusCode: constants.HTTP_RESPONSE_CODES.ERROR.NOT_FOUND, + errorMessage: 'No navigation found for plugin_id ' + req.params.plugin_id + }); + } + } else { + resolve({ + statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK, + data: navigation_manager.getNavigation() + }); + } + }); +}; + +/** + * Create the navigation object stored in this instance for a plugin. + * To be used across framework instances for informing each other of + * inter-instance navigation options. + * @param {Object} req - the Express request object + * @return {Function} Promise that resolves with success object or rejects + * with error + */ +navigationAPI.post = function(req) { + return new Promise(function(resolve, reject) { + var plugin_nav = navigation_manager.getNavigation()[req.params.plugin_id] || {}; + if (plugin_nav != {}) { + reject({ + statusCode: constants.HTTP_RESPONSE_CODES.ERROR.CONFLICT, + errorMessage: 'Navigation for ' + req.params.plugin_id + ' already exist' + }); + } else { + navigation_manager.addNavigation(req.params.plugin_id, req.body); + resolve({ + statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.CREATED, + data: {} + }); + } + }); +}; + +/** + * Update the navigation object stored in this instance for a plugin. + * @param {Object} req - the Express request object with a plugin_id and route_id + * @return {Function} Promise that resolves with success object or rejects + * with error + */ +navigationAPI.put = function(req) { + return new Promise(function(resolve, reject) { + var plugin_nav = navigation_manager.getNavigation()[req.params.plugin_id]['routes'][req.params.route_id]; + if (plugin_nav == null || plugin_nav == undefined) { + reject({ + statusCode: constants.HTTP_RESPONSE_CODES.ERROR.BAD_REQUEST, + errorMessage: 'Navigation for route' + req.params.route_id + ' under plugin ' + req.params.plugin_id + ' does not exist' + }); + } else { + navigation_manager.addNavigation(req.plugin_id, req.body); + resolve({ + statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK, + data: {} + }); + } + }); +}; + +/** + * Delete a particulat route navigation object stored in this instance for a plugin. + * @param {Object} req - the Express request object with a plugin_id and route_id + * @return {Function} Promise that resolves with success object or rejects + * with error + */ +navigationAPI.delete = function(req) { + return new Promise(function(resolve, reject) { + var plugin_nav = navigation_manager.getNavigation()[req.params.plugin_id]['routes'[req.params.route_id]]; + if (plugin_nav == null || plugin_nav == undefined) { + reject({ + statusCode: constants.HTTP_RESPONSE_CODES.ERROR.BAD_REQUEST, + errorMessage: 'Navigation for route' + req.params.route_id + ' under plugin ' + req.params.plugin_id + ' does not exist' + }); + } else { + navigation_manager.deleteNavigation(req.params.plugin_id, req.params.route_id); + resolve({ + statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK, + data: {} + }); + } + }); +}; + + +module.exports = navigationAPI; \ No newline at end of file