Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / framework / core / modules / api / navigation.js
diff --git a/skyquake/framework/core/modules/api/navigation.js b/skyquake/framework/core/modules/api/navigation.js
new file mode 100644 (file)
index 0000000..5f22835
--- /dev/null
@@ -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 <kiran.kashalkar@riftio.com>
+ */
+
+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