blob: 1226664af1df278de6bb4788f9b1898b41be55c7 [file] [log] [blame]
/*
* 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
*/
// 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('suppressed', false);
}
});
api.link().each(function (d) {
var link = d.el;
if (inLayer(d, which)) {
link.classed('suppressed', false);
}
});
}
function suppressLayers(b) {
api.node().classed('suppressed', b);
api.link().classed('suppressed', b);
// d3.selectAll('svg .port').classed('inactive', false);
// d3.selectAll('svg .portText').classed('inactive', false);
}
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
};
}]);
}());