aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js')
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js149
1 files changed, 149 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js
new file mode 100644
index 00000000..f9b96ae8
--- /dev/null
+++ b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Topology layer filtering Module.
+ Provides functionality to visually differentiate between the packet and
+ optical layers of the topology.
+ */
+
+(function () {
+ 'use strict';
+
+ // injected refs
+ var $log, fs, flash, tps, tts;
+
+ // api to topoForce
+ var api;
+ /*
+ node() // get ref to D3 selection of nodes
+ link() // get ref to D3 selection of links
+ */
+
+ var smax = 'suppressedmax';
+
+ // which "layer" a particular item "belongs to"
+ var layerLookup = {
+ host: {
+ endstation: 'pkt', // default, if host event does not define type
+ router: 'pkt',
+ bgpSpeaker: 'pkt'
+ },
+ device: {
+ switch: 'pkt',
+ roadm: 'opt'
+ },
+ link: {
+ hostLink: 'pkt',
+ direct: 'pkt',
+ indirect: '',
+ tunnel: '',
+ optical: 'opt'
+ }
+ },
+ // order of layer cycling in button
+ dispatch = [
+ {
+ type: 'all',
+ action: function () { suppressLayers(false); },
+ msg: 'All Layers Shown'
+ },
+ {
+ type: 'pkt',
+ action: function () { showLayer('pkt'); },
+ msg: 'Packet Layer Shown'
+ },
+ {
+ type: 'opt',
+ action: function () { showLayer('opt'); },
+ msg: 'Optical Layer Shown'
+ }
+ ],
+ layer = 0;
+
+ function clickAction() {
+ layer = (layer + 1) % dispatch.length;
+ dispatch[layer].action();
+ flash.flash(dispatch[layer].msg);
+ }
+
+ function selected() {
+ return dispatch[layer].type;
+ }
+
+ function inLayer(d, layer) {
+ var type = d.class === 'link' ? d.type() : d.type,
+ look = layerLookup[d.class],
+ lyr = look && look[type];
+ return lyr === layer;
+ }
+
+ function unsuppressLayer(which) {
+ api.node().each(function (d) {
+ var node = d.el;
+ if (inLayer(d, which)) {
+ node.classed(smax, false);
+ }
+ });
+
+ api.link().each(function (d) {
+ var link = d.el;
+ if (inLayer(d, which)) {
+ link.classed(smax, false);
+ }
+ });
+ }
+
+ function suppressLayers(b) {
+ api.node().classed(smax, b);
+ api.link().classed(smax, b);
+ }
+
+ function showLayer(which) {
+ suppressLayers(true);
+ unsuppressLayer(which);
+ }
+
+ // === -----------------------------------------------------
+ // === MODULE DEFINITION ===
+
+ angular.module('ovTopo')
+ .factory('TopoFilterService',
+ ['$log', 'FnService',
+ 'FlashService',
+ 'TopoPanelService',
+ 'TopoTrafficService',
+
+ function (_$log_, _fs_, _flash_, _tps_, _tts_) {
+ $log = _$log_;
+ fs = _fs_;
+ flash = _flash_;
+ tps = _tps_;
+ tts = _tts_;
+
+ function initFilter(_api_) {
+ api = _api_;
+ }
+
+ return {
+ initFilter: initFilter,
+
+ clickAction: clickAction,
+ selected: selected,
+ inLayer: inLayer
+ };
+ }]);
+}());