blob: 8df63d6e1bb1126205b3a843688f248a02ba8867 [file] [log] [blame]
Steven Burrows57e24e92016-08-04 18:38:24 +01001/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 ONOS GUI -- Topology Region Module.
19 Module that holds the current region in memory
20 */
21
22(function () {
23 'use strict';
24
Steven Burrows6deb4ce2016-08-26 16:06:23 +010025 // Injected Services
Steven Burrows1aa4f582016-12-13 15:05:41 -050026 var $log, t2sr, t2ds, t2hs, t2ls, t2zs, t2dps;
Steven Burrowsdfa52b02016-09-02 13:50:43 +010027 var Model;
Steven Burrows57e24e92016-08-04 18:38:24 +010028
Steven Burrowsdfa52b02016-09-02 13:50:43 +010029 // Internal
Steven Burrows1aa4f582016-12-13 15:05:41 -050030 var region
Steven Burrows57e24e92016-08-04 18:38:24 +010031
Steven Burrowsdfa52b02016-09-02 13:50:43 +010032 function init() {}
Steven Burrows57e24e92016-08-04 18:38:24 +010033
34 function addRegion(data) {
35
Steven Burrows6deb4ce2016-08-26 16:06:23 +010036 var RegionModel = Model.extend({
Steven Burrowsa3fca812016-10-14 15:11:04 -050037 findNodeById: findNodeById,
38 nodes: regionNodes
Steven Burrowsdfa52b02016-09-02 13:50:43 +010039 });
Steven Burrows6deb4ce2016-08-26 16:06:23 +010040
41 region = new RegionModel({
Steven Burrowsec1f45c2016-08-08 16:14:41 +010042 id: data.id,
Steven Burrowsdfa52b02016-09-02 13:50:43 +010043 layerOrder: data.layerOrder
Steven Burrowsec1f45c2016-08-08 16:14:41 +010044 });
45
46 region.set({
47 subregions: t2sr.createSubRegionCollection(data.subregions, region),
48 devices: t2ds.createDeviceCollection(data.devices, region),
49 hosts: t2hs.createHostCollection(data.hosts, region),
Steven Burrowsdfa52b02016-09-02 13:50:43 +010050 links: t2ls.createLinkCollection(data.links, region)
Steven Burrowsec1f45c2016-08-08 16:14:41 +010051 });
52
Steven Burrowsec1f45c2016-08-08 16:14:41 +010053 angular.forEach(region.get('links').models, function (link) {
54 link.createLink();
55 });
Steven Burrows57e24e92016-08-04 18:38:24 +010056
Simon Hunt53612212016-12-04 17:19:52 -080057
58 // TODO: replace with an algorithm that computes appropriate transition
59 // based on the location of the "region node" on the parent map
60
Steven Burrows1742bb82016-10-27 10:36:25 -050061 // TEMP Map Zoom
62 var regionPanZooms = {
63 "(root)": {
Simon Hunt53612212016-12-04 17:19:52 -080064 scale: 4.21,
65 translate: [-2066.3049871603093, -2130.190726668792]
Steven Burrows1742bb82016-10-27 10:36:25 -050066 },
Simon Hunt53612212016-12-04 17:19:52 -080067 c01: {
68 scale: 19.8855,
69 translate: [-10375.91165337411, -10862.217941271818]
Steven Burrows1742bb82016-10-27 10:36:25 -050070 },
Simon Hunt53612212016-12-04 17:19:52 -080071 c02: {
72 scale: 24.25,
73 translate: [-14169.70851936781, -15649.174761455488]
Steven Burrows1742bb82016-10-27 10:36:25 -050074 },
Simon Hunt53612212016-12-04 17:19:52 -080075 c03: {
76 scale: 22.72,
77 translate: [-14950.92246589002, -15390.955326616648]
78 },
79 c04: {
80 scale: 26.24,
81 translate: [-16664.006814209282, -16217.021478816077]
Steven Burrows1742bb82016-10-27 10:36:25 -050082 }
83 };
84
Simon Hunt53612212016-12-04 17:19:52 -080085
Steven Burrows1742bb82016-10-27 10:36:25 -050086 setTimeout(function () {
Steven Burrows1aa4f582016-12-13 15:05:41 -050087 var regionPZ = regionPanZooms[region.get('id')];
88 t2zs.panAndZoom(regionPZ.translate, regionPZ.scale);
Steven Burrows1742bb82016-10-27 10:36:25 -050089 }, 10);
90
Steven Burrows57e24e92016-08-04 18:38:24 +010091 $log.debug('Region: ', region);
92 }
93
Steven Burrows8f45ce22016-10-27 20:04:14 -050094 function findNodeById(link, id) {
Steven Burrows6deb4ce2016-08-26 16:06:23 +010095
Steven Burrows8f45ce22016-10-27 20:04:14 -050096
97 if (link.get('type') !== 'UiEdgeLink') {
98 // Remove /{port} from id if needed
99 var regex = new RegExp('^[^/]*');
100 id = regex.exec(id)[0];
101 }
Steven Burrows6deb4ce2016-08-26 16:06:23 +0100102
103 return region.get('devices').get(id) ||
104 region.get('hosts').get(id) ||
105 region.get('subregions').get(id);
106 }
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100107
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100108 function regionNodes() {
109
110 if (region) {
111 return [].concat(
112 region.get('devices').models,
113 region.get('hosts').models,
114 region.get('subregions').models
115 );
116 }
117
118 return [];
119 }
120
Steven Burrows1c5c8612016-10-05 13:45:13 -0500121 function filterRegionNodes(predicate) {
122 var nodes = regionNodes();
123 return _.filter(nodes, predicate);
124 }
125
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100126 function regionLinks() {
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100127 return (region) ? region.get('links').models : [];
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100128 }
129
Steven Burrows1aa4f582016-12-13 15:05:41 -0500130 function deselectAllNodes() {
131
132 var selected = filterRegionNodes(function (node) {
133 return node.get('selected', true);
134 });
135
136 if (selected.length) {
137
138 selected.forEach(function (node) {
139 node.deselect();
140 });
141
142 t2dps().el.hide();
143 return true;
144 }
145
146 // TODO: close details panel
147
148 return false;
149 }
150
151 function deselectLink() {
152
153 var selected = _.filter(regionLinks(), function (link) {
154 return link.get('selected', true);
155 });
156
157 if (selected.length) {
158
159 selected.forEach(function (link) {
160 link.deselect();
161 });
162
163 t2dps().el.hide();
164 return true;
165 }
166
167 return false;
168 }
169
Steven Burrows57e24e92016-08-04 18:38:24 +0100170 angular.module('ovTopo2')
171 .factory('Topo2RegionService',
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100172 ['$log', 'Topo2Model',
173 'Topo2SubRegionService', 'Topo2DeviceService',
Steven Burrows1aa4f582016-12-13 15:05:41 -0500174 'Topo2HostService', 'Topo2LinkService', 'Topo2ZoomService', 'Topo2DetailsPanelService',
Steven Burrows57e24e92016-08-04 18:38:24 +0100175
Steven Burrows1aa4f582016-12-13 15:05:41 -0500176 function (_$log_, _Model_, _t2sr_, _t2ds_, _t2hs_, _t2ls_, _t2zs_, _t2dps_) {
Steven Burrows57e24e92016-08-04 18:38:24 +0100177
178 $log = _$log_;
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100179 Model = _Model_;
Steven Burrows57e24e92016-08-04 18:38:24 +0100180 t2sr = _t2sr_;
181 t2ds = _t2ds_;
182 t2hs = _t2hs_;
183 t2ls = _t2ls_;
Steven Burrows1742bb82016-10-27 10:36:25 -0500184 t2zs = _t2zs_;
Steven Burrows1aa4f582016-12-13 15:05:41 -0500185 t2dps = _t2dps_;
Steven Burrows57e24e92016-08-04 18:38:24 +0100186
187 return {
188 init: init,
189
190 addRegion: addRegion,
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100191 regionNodes: regionNodes,
192 regionLinks: regionLinks,
Steven Burrows1c5c8612016-10-05 13:45:13 -0500193 filterRegionNodes: filterRegionNodes,
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100194
Steven Burrows1aa4f582016-12-13 15:05:41 -0500195 deselectAllNodes: deselectAllNodes,
196 deselectLink: deselectLink,
197
Steven Burrows57e24e92016-08-04 18:38:24 +0100198 getSubRegions: t2sr.getSubRegions
199 };
200 }]);
201
202})();