Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / plugins / launchpad / src / topologyView / topologyStore.js
diff --git a/skyquake/plugins/launchpad/src/topologyView/topologyStore.js b/skyquake/plugins/launchpad/src/topologyView/topologyStore.js
new file mode 100644 (file)
index 0000000..10c5005
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * 
+ *   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.
+ *
+ */
+import TopologyActions from './topologyActions.js';
+import TopologySource from './topologySource.js';
+// import source
+import Alt from '../alt';
+let rw = require('utils/rw.js');
+class TopologyStore {
+    constructor() {
+        var self = this;
+        // initial state
+        this.isLoading = true;
+        this.topologyData = {};
+        this.socket = null;
+        this.detailView = null;
+        this.hasSelected = false;
+        // bind action listeners
+        this.bindActions(TopologyActions);
+
+        // bind source listeners
+        this.exportAsync(TopologySource);
+        this.exportPublicMethods({
+            selectNode: this.selectNode,
+            closeSocket: this.closeSocket,
+            getTopologyData: this.getTopologyData
+        })
+        this.ajax_mode = rw.getSearchParams(window.location).ajax_mode || false;
+    }
+    selectNode = (node) => {
+        var apiType = {
+            'nsr' : 'getRawNSR',
+            'vdur' : 'getRawVDUR',
+            'vnfr': 'getRawVNFR'
+        }
+        // TODO: VISIT
+       apiType[node.type] && this.getInstance()[apiType[node.type]](node.id, node.parent ? node.parent.id : undefined);
+    }
+    getRawSuccess = (data) => {
+        this.setState({
+            detailView: data
+        });
+    }
+    getRawLoading = () => {
+
+    }
+    getRawError = () => {
+
+    }
+
+    getTopologyData = (nsr_id) => {
+        if (this.ajax_mode) {
+            this.getInstance().getNSRTopology(nsr_id);
+        } else {
+            this.getInstance().openNSRTopologySocket(nsr_id);
+        }
+    }
+
+    openNSRTopologySocketLoading = () => {
+         console.log('loading')
+    }
+    openNSRTopologySocketSuccess = (connection) => {
+        let self = this;
+
+        let connectionManager = (type, connection) => {
+            let ws = window.multiplexer.channel(connection);
+            if (!connection) {
+                console.warn('There was an issue connecting to the ' + type + ' socket');
+                return;
+            }
+            if (self.socket) {
+                self.closeSocket();
+            }
+
+            self.setState({
+                socket: ws.ws,
+                channelId: connection
+            });
+            ws.onmessage = function(data) {
+                var tData = JSON.parse(data.data);
+                var newState = {
+                    topologyData: tData,
+                    isLoading: false
+                };
+                if(!self.hasSelected) {
+                    newState.hasSelected = true;
+                    self.selectNode(tData);
+                }
+                self.setState(newState);
+
+            };
+        }
+
+        connectionManager('nsr', connection);
+    }
+    openNSRTopologySocketError = () => {
+        console.log('error')
+    }
+    handleLogout = () => {
+        this.closeSocket();
+    }
+    closeSocket = () => {
+        if (this.socket) {
+            window.multiplexer.channel(this.channelId).close();
+        }
+        this.setState({
+            socket: null
+        })
+    }
+    getNSRTopologySuccess = (data) => {
+        this.setState({
+            topologyData: data,
+            errorMessage: null,
+            isLoading: false
+        });
+    }
+    getNSRTopologyLoading = () => {}
+    getNSRTopologyError = (errorMessage) => {
+        console.log('error', errorMessage)
+        //this.errorMessage = errorMessage;
+    }
+
+}
+export default Alt.createStore(TopologyStore);