blob: be6bffe82eb5a403dfdea8d53c31cdda302bcbc7 [file] [log] [blame]
Steven Burrowse3a18842016-09-22 15:33:33 +01001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Steven Burrowse3a18842016-09-22 15:33:33 +01003 *
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 Map Module.
19 Defines behavior for loading geographical maps into the map layer.
20 */
21
22(function () {
23 'use strict';
24
Steven Burrowsd576f642016-09-26 10:40:51 -070025 // Injected Services
Steven Burrows1c2a9682017-07-14 16:52:46 +010026 var t2zs, countryFilters, ms;
Steven Burrowsd576f642016-09-26 10:40:51 -070027
Steven Burrowse3a18842016-09-22 15:33:33 +010028 // internal state
Steven Burrows1c2a9682017-07-14 16:52:46 +010029 var instance, zoomer, currentMap;
Steven Burrowse3a18842016-09-22 15:33:33 +010030
Steven Burrowsb43c1a92017-03-07 17:13:28 +000031 function init() {
32 this.appendElement('#topo2-background', 'g');
Steven Burrowsb43c1a92017-03-07 17:13:28 +000033 zoomer = t2zs.getZoomer();
Steven Burrows9053fdb2017-04-12 12:08:16 -070034 currentMap = null;
Steven Burrowse3a18842016-09-22 15:33:33 +010035 }
36
Steven Burrowsb43c1a92017-03-07 17:13:28 +000037 function setUpMap(mapId, mapFilePath, mapScale) {
38
Steven Burrows091a1b12017-04-10 09:52:35 -070039 if (currentMap === mapId) {
Steven Burrows1c2a9682017-07-14 16:52:46 +010040 return new Promise(function (resolve) {
Steven Burrows091a1b12017-04-10 09:52:35 -070041 resolve();
42 });
43 }
44
45 currentMap = mapId;
46
Steven Burrowsb43c1a92017-03-07 17:13:28 +000047 var loadMap = ms.loadMapInto,
Steven Burrowse3a18842016-09-22 15:33:33 +010048 promise, cfilter;
49
Steven Burrows1c2a9682017-07-14 16:52:46 +010050 this.node().selectAll('*').remove();
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000051
Steven Burrowse3a18842016-09-22 15:33:33 +010052 if (mapFilePath === '*countries') {
Steven Burrowse3a18842016-09-22 15:33:33 +010053 cfilter = countryFilters[mapId] || countryFilters.uk;
Steven Burrowse7cc3082016-09-27 11:24:58 -070054 loadMap = ms.loadMapRegionInto;
Steven Burrowse3a18842016-09-22 15:33:33 +010055 }
56
Steven Burrowsb43c1a92017-03-07 17:13:28 +000057 promise = loadMap(this.node(), mapFilePath, mapId, {
Steven Burrowsd576f642016-09-26 10:40:51 -070058 countryFilters: cfilter,
Steven Burrows7d1efef2017-03-25 02:07:43 +000059 adjustScale: mapScale || 1,
Steven Burrows1c2a9682017-07-14 16:52:46 +010060 shading: '',
Steven Burrowsd576f642016-09-26 10:40:51 -070061 });
62
Steven Burrowse3a18842016-09-22 15:33:33 +010063 return promise;
64 }
65
Steven Burrowsd576f642016-09-26 10:40:51 -070066
Steven Burrows1c5c8612016-10-05 13:45:13 -050067 function resetZoom() {
68 zoomer.reset();
69 }
70
Simon Huntc43a59d2017-04-05 13:56:13 -070071 function zoomCallback(sc, tr) {
72 // keep the map lines constant width while zooming
73 this.node().style('stroke-width', (2.0 / sc) + 'px');
74 }
75
Steven Burrows091a1b12017-04-10 09:52:35 -070076 function getCurrentMap() {
77 return currentMap;
78 }
79
Steven Burrowse3a18842016-09-22 15:33:33 +010080 angular.module('ovTopo2')
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000081 .factory('Topo2MapService', [
Steven Burrows1c2a9682017-07-14 16:52:46 +010082 'Topo2ZoomService', 'MapService', 'Topo2ViewController',
Steven Burrowse3a18842016-09-22 15:33:33 +010083
Steven Burrows1c2a9682017-07-14 16:52:46 +010084 function (_t2zs_, _ms_, ViewController) {
Simon Hunt5c3ed732017-07-20 19:03:28 +000085 t2zs = _t2zs_;
Steven Burrows1c2a9682017-07-14 16:52:46 +010086 ms = _ms_;
Steven Burrows86b74fc2017-02-22 00:15:16 +000087
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000088 var MapLayer = ViewController.extend({
Steven Burrows1c5c8612016-10-05 13:45:13 -050089
Simon Hunt95f4b422017-03-03 13:49:05 -080090 id: 'topo2-map',
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000091 displayName: 'Map',
Steven Burrowse3a18842016-09-22 15:33:33 +010092
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000093 init: init,
Steven Burrowsb43c1a92017-03-07 17:13:28 +000094 setUpMap: setUpMap,
Simon Huntc43a59d2017-04-05 13:56:13 -070095 resetZoom: resetZoom,
Steven Burrows091a1b12017-04-10 09:52:35 -070096 zoomCallback: zoomCallback,
Steven Burrows1c2a9682017-07-14 16:52:46 +010097 getCurrentMap: getCurrentMap,
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000098 });
99
100 return instance || new MapLayer();
Steven Burrows1c2a9682017-07-14 16:52:46 +0100101 },
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000102 ]);
Steven Burrowse3a18842016-09-22 15:33:33 +0100103})();