blob: 6becc4902d1cb31c98d2df17b6c85e0b9e8cd765 [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 Burrowsdfa52b02016-09-02 13:50:43 +010026 var $log, t2sr, t2ds, t2hs, t2ls;
27 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({
37 findNodeById: findNodeById
Steven Burrowsdfa52b02016-09-02 13:50:43 +010038 });
Steven Burrows6deb4ce2016-08-26 16:06:23 +010039
40 region = new RegionModel({
Steven Burrowsec1f45c2016-08-08 16:14:41 +010041 id: data.id,
Steven Burrowsdfa52b02016-09-02 13:50:43 +010042 layerOrder: data.layerOrder
Steven Burrowsec1f45c2016-08-08 16:14:41 +010043 });
44
45 region.set({
46 subregions: t2sr.createSubRegionCollection(data.subregions, region),
47 devices: t2ds.createDeviceCollection(data.devices, region),
48 hosts: t2hs.createHostCollection(data.hosts, region),
Steven Burrowsdfa52b02016-09-02 13:50:43 +010049 links: t2ls.createLinkCollection(data.links, region)
Steven Burrowsec1f45c2016-08-08 16:14:41 +010050 });
51
Steven Burrowsec1f45c2016-08-08 16:14:41 +010052 angular.forEach(region.get('links').models, function (link) {
53 link.createLink();
54 });
Steven Burrows57e24e92016-08-04 18:38:24 +010055
56 $log.debug('Region: ', region);
57 }
58
Steven Burrows6deb4ce2016-08-26 16:06:23 +010059 function findNodeById(id) {
60
61 // Remove /{port} from id if needed
Steven Burrowsdfa52b02016-09-02 13:50:43 +010062 var regex = new RegExp('^[^/]*');
Steven Burrows6deb4ce2016-08-26 16:06:23 +010063 id = regex.exec(id)[0];
64
65 return region.get('devices').get(id) ||
66 region.get('hosts').get(id) ||
67 region.get('subregions').get(id);
68 }
Steven Burrowsec1f45c2016-08-08 16:14:41 +010069
Steven Burrowsdfa52b02016-09-02 13:50:43 +010070 function regionNodes() {
71
72 if (region) {
73 return [].concat(
74 region.get('devices').models,
75 region.get('hosts').models,
76 region.get('subregions').models
77 );
78 }
79
80 return [];
81 }
82
Steven Burrows1c5c8612016-10-05 13:45:13 -050083 function filterRegionNodes(predicate) {
84 var nodes = regionNodes();
85 return _.filter(nodes, predicate);
86 }
87
Steven Burrowsec1f45c2016-08-08 16:14:41 +010088 function regionLinks() {
Steven Burrowsdfa52b02016-09-02 13:50:43 +010089 return (region) ? region.get('links').models : [];
Steven Burrowsec1f45c2016-08-08 16:14:41 +010090 }
91
Steven Burrows57e24e92016-08-04 18:38:24 +010092 angular.module('ovTopo2')
93 .factory('Topo2RegionService',
Steven Burrowsdfa52b02016-09-02 13:50:43 +010094 ['$log', 'Topo2Model',
95 'Topo2SubRegionService', 'Topo2DeviceService',
96 'Topo2HostService', 'Topo2LinkService',
Steven Burrows57e24e92016-08-04 18:38:24 +010097
Steven Burrowsdfa52b02016-09-02 13:50:43 +010098 function (_$log_, _Model_, _t2sr_, _t2ds_, _t2hs_, _t2ls_) {
Steven Burrows57e24e92016-08-04 18:38:24 +010099
100 $log = _$log_;
Steven Burrowsdfa52b02016-09-02 13:50:43 +0100101 Model = _Model_;
Steven Burrows57e24e92016-08-04 18:38:24 +0100102 t2sr = _t2sr_;
103 t2ds = _t2ds_;
104 t2hs = _t2hs_;
105 t2ls = _t2ls_;
106
107 return {
108 init: init,
109
110 addRegion: addRegion,
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100111 regionNodes: regionNodes,
112 regionLinks: regionLinks,
Steven Burrows1c5c8612016-10-05 13:45:13 -0500113 filterRegionNodes: filterRegionNodes,
Steven Burrowsec1f45c2016-08-08 16:14:41 +0100114
Steven Burrows57e24e92016-08-04 18:38:24 +0100115 getSubRegions: t2sr.getSubRegions
116 };
117 }]);
118
119})();