blob: bd24bbb00ed5a1953ca5536a8396e3fe827bb70b [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 Burrows1742bb82016-10-27 10:36:25 -050026 var $log, t2sr, t2ds, t2hs, t2ls, t2zs;
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 Burrowsec1f45c2016-08-08 16:14:41 +010030 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
Steven Burrows1742bb82016-10-27 10:36:25 -050057 console.log(region.get('id'));
58
59 // TEMP Map Zoom
60 var regionPanZooms = {
61 "(root)": {
62 scale: 0.8,
63 translate: [-384.5881010374517, -512.2527728775849]
64 },
65 rBrg: {
66 scale: 2.75,
67 translate: [-2929.288248714413, -3498.849169115524]
68 },
69 rLon: {
70 scale: 2.75,
71 translate: [-2873.682762707102, -3320.483337006704]
72 },
73 rTha: {
74 scale: 7.5,
75 translate: [-8751.376289753565, -9950.962850877779]
76 }
77 };
78
79 setTimeout(function () {
80 var reigionPZ = regionPanZooms[region.get('id')];
81 t2zs.panAndZoom(reigionPZ.translate, reigionPZ.scale);
82 }, 10);
83
Steven Burrows57e24e92016-08-04 18:38:24 +010084 $log.debug('Region: ', region);
85 }
86
Steven Burrows8f45ce22016-10-27 20:04:14 -050087 function findNodeById(link, id) {
Steven Burrows6deb4ce2016-08-26 16:06:23 +010088
Steven Burrows8f45ce22016-10-27 20:04:14 -050089
90 if (link.get('type') !== 'UiEdgeLink') {
91 // Remove /{port} from id if needed
92 var regex = new RegExp('^[^/]*');
93 id = regex.exec(id)[0];
94 }
Steven Burrows6deb4ce2016-08-26 16:06:23 +010095
96 return region.get('devices').get(id) ||
97 region.get('hosts').get(id) ||
98 region.get('subregions').get(id);
99 }
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100100
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100101 function regionNodes() {
102
103 if (region) {
104 return [].concat(
105 region.get('devices').models,
106 region.get('hosts').models,
107 region.get('subregions').models
108 );
109 }
110
111 return [];
112 }
113
Steven Burrows1c5c8612016-10-05 13:45:13 -0500114 function filterRegionNodes(predicate) {
115 var nodes = regionNodes();
116 return _.filter(nodes, predicate);
117 }
118
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100119 function regionLinks() {
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100120 return (region) ? region.get('links').models : [];
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100121 }
122
Steven Burrows57e24e92016-08-04 18:38:24 +0100123 angular.module('ovTopo2')
124 .factory('Topo2RegionService',
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100125 ['$log', 'Topo2Model',
126 'Topo2SubRegionService', 'Topo2DeviceService',
Steven Burrows1742bb82016-10-27 10:36:25 -0500127 'Topo2HostService', 'Topo2LinkService', 'Topo2ZoomService',
Steven Burrows57e24e92016-08-04 18:38:24 +0100128
Steven Burrows1742bb82016-10-27 10:36:25 -0500129 function (_$log_, _Model_, _t2sr_, _t2ds_, _t2hs_, _t2ls_, _t2zs_) {
Steven Burrows57e24e92016-08-04 18:38:24 +0100130
131 $log = _$log_;
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100132 Model = _Model_;
Steven Burrows57e24e92016-08-04 18:38:24 +0100133 t2sr = _t2sr_;
134 t2ds = _t2ds_;
135 t2hs = _t2hs_;
136 t2ls = _t2ls_;
Steven Burrows1742bb82016-10-27 10:36:25 -0500137 t2zs = _t2zs_;
Steven Burrows57e24e92016-08-04 18:38:24 +0100138
139 return {
140 init: init,
141
142 addRegion: addRegion,
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100143 regionNodes: regionNodes,
144 regionLinks: regionLinks,
Steven Burrows1c5c8612016-10-05 13:45:13 -0500145 filterRegionNodes: filterRegionNodes,
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100146
Steven Burrows57e24e92016-08-04 18:38:24 +0100147 getSubRegions: t2sr.getSubRegions
148 };
149 }]);
150
151})();