blob: b40eff7574b24fa8adfb9f19e8cf3fcdf6e029fb [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 Burrows8ea5dea2016-12-27 13:28:41 +000026 var $log, t2sr, t2ds, t2hs, t2ls, t2zs, t2dps, t2bcs;
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 Burrows8ea5dea2016-12-27 13:28:41 +000032 // 'static' vars
33 var ROOT = '(root)';
34
Steven Burrowsdfa52b02016-09-02 13:50:43 +010035 function init() {}
Steven Burrows57e24e92016-08-04 18:38:24 +010036
37 function addRegion(data) {
38
Steven Burrows6deb4ce2016-08-26 16:06:23 +010039 var RegionModel = Model.extend({
Steven Burrowsa3fca812016-10-14 15:11:04 -050040 findNodeById: findNodeById,
41 nodes: regionNodes
Steven Burrowsdfa52b02016-09-02 13:50:43 +010042 });
Steven Burrows6deb4ce2016-08-26 16:06:23 +010043
44 region = new RegionModel({
Steven Burrowsec1f45c2016-08-08 16:14:41 +010045 id: data.id,
Steven Burrowsdfa52b02016-09-02 13:50:43 +010046 layerOrder: data.layerOrder
Steven Burrowsec1f45c2016-08-08 16:14:41 +010047 });
48
49 region.set({
50 subregions: t2sr.createSubRegionCollection(data.subregions, region),
51 devices: t2ds.createDeviceCollection(data.devices, region),
52 hosts: t2hs.createHostCollection(data.hosts, region),
Steven Burrowsdfa52b02016-09-02 13:50:43 +010053 links: t2ls.createLinkCollection(data.links, region)
Steven Burrowsec1f45c2016-08-08 16:14:41 +010054 });
55
Steven Burrowsec1f45c2016-08-08 16:14:41 +010056 angular.forEach(region.get('links').models, function (link) {
57 link.createLink();
58 });
Steven Burrows57e24e92016-08-04 18:38:24 +010059
Simon Hunt53612212016-12-04 17:19:52 -080060 // TODO: replace with an algorithm that computes appropriate transition
61 // based on the location of the "region node" on the parent map
62
Steven Burrows1742bb82016-10-27 10:36:25 -050063 // TEMP Map Zoom
64 var regionPanZooms = {
65 "(root)": {
Simon Hunt53612212016-12-04 17:19:52 -080066 scale: 4.21,
67 translate: [-2066.3049871603093, -2130.190726668792]
Steven Burrows1742bb82016-10-27 10:36:25 -050068 },
Simon Hunt53612212016-12-04 17:19:52 -080069 c01: {
70 scale: 19.8855,
71 translate: [-10375.91165337411, -10862.217941271818]
Steven Burrows1742bb82016-10-27 10:36:25 -050072 },
Simon Hunt53612212016-12-04 17:19:52 -080073 c02: {
74 scale: 24.25,
75 translate: [-14169.70851936781, -15649.174761455488]
Steven Burrows1742bb82016-10-27 10:36:25 -050076 },
Simon Hunt53612212016-12-04 17:19:52 -080077 c03: {
78 scale: 22.72,
79 translate: [-14950.92246589002, -15390.955326616648]
80 },
81 c04: {
82 scale: 26.24,
83 translate: [-16664.006814209282, -16217.021478816077]
Steven Burrows1742bb82016-10-27 10:36:25 -050084 }
85 };
86
Simon Hunt53612212016-12-04 17:19:52 -080087
Steven Burrows8ea5dea2016-12-27 13:28:41 +000088 // Hide Breadcrumbs if there are no subregions configured in the root region
89 if (isRootRegion() && !region.get('subregions').models.length) {
90 t2bcs.hide();
91 }
92
Steven Burrows1742bb82016-10-27 10:36:25 -050093 setTimeout(function () {
Steven Burrows1aa4f582016-12-13 15:05:41 -050094 var regionPZ = regionPanZooms[region.get('id')];
95 t2zs.panAndZoom(regionPZ.translate, regionPZ.scale);
Steven Burrows1742bb82016-10-27 10:36:25 -050096 }, 10);
97
Steven Burrows57e24e92016-08-04 18:38:24 +010098 $log.debug('Region: ', region);
99 }
100
Steven Burrows8f45ce22016-10-27 20:04:14 -0500101 function findNodeById(link, id) {
Steven Burrows6deb4ce2016-08-26 16:06:23 +0100102
Steven Burrows8f45ce22016-10-27 20:04:14 -0500103
104 if (link.get('type') !== 'UiEdgeLink') {
105 // Remove /{port} from id if needed
106 var regex = new RegExp('^[^/]*');
107 id = regex.exec(id)[0];
108 }
Steven Burrows6deb4ce2016-08-26 16:06:23 +0100109
110 return region.get('devices').get(id) ||
111 region.get('hosts').get(id) ||
112 region.get('subregions').get(id);
113 }
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100114
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100115 function regionNodes() {
116
117 if (region) {
118 return [].concat(
119 region.get('devices').models,
120 region.get('hosts').models,
121 region.get('subregions').models
122 );
123 }
124
125 return [];
126 }
127
Steven Burrows1c5c8612016-10-05 13:45:13 -0500128 function filterRegionNodes(predicate) {
129 var nodes = regionNodes();
130 return _.filter(nodes, predicate);
131 }
132
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100133 function regionLinks() {
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100134 return (region) ? region.get('links').models : [];
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100135 }
136
Steven Burrows1aa4f582016-12-13 15:05:41 -0500137 function deselectAllNodes() {
138
139 var selected = filterRegionNodes(function (node) {
140 return node.get('selected', true);
141 });
142
143 if (selected.length) {
144
145 selected.forEach(function (node) {
146 node.deselect();
147 });
148
149 t2dps().el.hide();
150 return true;
151 }
152
Steven Burrows1aa4f582016-12-13 15:05:41 -0500153 return false;
154 }
155
156 function deselectLink() {
157
158 var selected = _.filter(regionLinks(), function (link) {
159 return link.get('selected', true);
160 });
161
162 if (selected.length) {
163
164 selected.forEach(function (link) {
165 link.deselect();
166 });
167
168 t2dps().el.hide();
169 return true;
170 }
171
172 return false;
173 }
174
Steven Burrows8ea5dea2016-12-27 13:28:41 +0000175 function isRootRegion() {
176 return region.get('id') === ROOT;
177 }
178
Steven Burrows57e24e92016-08-04 18:38:24 +0100179 angular.module('ovTopo2')
180 .factory('Topo2RegionService',
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100181 ['$log', 'Topo2Model',
182 'Topo2SubRegionService', 'Topo2DeviceService',
Steven Burrows1aa4f582016-12-13 15:05:41 -0500183 'Topo2HostService', 'Topo2LinkService', 'Topo2ZoomService', 'Topo2DetailsPanelService',
Steven Burrows8ea5dea2016-12-27 13:28:41 +0000184 'Topo2BreadcrumbService',
Steven Burrows57e24e92016-08-04 18:38:24 +0100185
Steven Burrows8ea5dea2016-12-27 13:28:41 +0000186 function (_$log_, _Model_, _t2sr_, _t2ds_, _t2hs_, _t2ls_, _t2zs_, _t2dps_, _t2bcs_) {
Steven Burrows57e24e92016-08-04 18:38:24 +0100187
188 $log = _$log_;
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100189 Model = _Model_;
Steven Burrows57e24e92016-08-04 18:38:24 +0100190 t2sr = _t2sr_;
191 t2ds = _t2ds_;
192 t2hs = _t2hs_;
193 t2ls = _t2ls_;
Steven Burrows1742bb82016-10-27 10:36:25 -0500194 t2zs = _t2zs_;
Steven Burrows1aa4f582016-12-13 15:05:41 -0500195 t2dps = _t2dps_;
Steven Burrows8ea5dea2016-12-27 13:28:41 +0000196 t2bcs = _t2bcs_;
Steven Burrows57e24e92016-08-04 18:38:24 +0100197
198 return {
199 init: init,
200
201 addRegion: addRegion,
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100202 regionNodes: regionNodes,
203 regionLinks: regionLinks,
Steven Burrows1c5c8612016-10-05 13:45:13 -0500204 filterRegionNodes: filterRegionNodes,
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100205
Steven Burrows1aa4f582016-12-13 15:05:41 -0500206 deselectAllNodes: deselectAllNodes,
207 deselectLink: deselectLink,
Steven Burrows57e24e92016-08-04 18:38:24 +0100208 };
209 }]);
210
211})();