blob: 002ca693854baff0875b4fc919d79470fcbc4b2b [file] [log] [blame]
Steven Burrowse3a18842016-09-22 15:33:33 +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 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 Burrowsb43c1a92017-03-07 17:13:28 +000026 var $log, $loc, ps, ms, flash, sus, t2zs, countryFilters;
Steven Burrowsd576f642016-09-26 10:40:51 -070027
Steven Burrowse3a18842016-09-22 15:33:33 +010028 // internal state
Steven Burrows091a1b12017-04-10 09:52:35 -070029 var instance, mapG, zoomLayer, 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');
33 zoomLayer = d3.select('#topo2-zoomlayer');
34 zoomer = t2zs.getZoomer();
Steven Burrows9053fdb2017-04-12 12:08:16 -070035 currentMap = null;
Steven Burrowse3a18842016-09-22 15:33:33 +010036 }
37
Steven Burrowsb43c1a92017-03-07 17:13:28 +000038 function setUpMap(mapId, mapFilePath, mapScale) {
39
Steven Burrows091a1b12017-04-10 09:52:35 -070040 if (currentMap === mapId) {
41 return new Promise(function(resolve) {
42 resolve();
43 });
44 }
45
46 currentMap = mapId;
47
Steven Burrowsb43c1a92017-03-07 17:13:28 +000048 var loadMap = ms.loadMapInto,
Steven Burrowse3a18842016-09-22 15:33:33 +010049 promise, cfilter;
50
Steven Burrowsb43c1a92017-03-07 17:13:28 +000051 this.node().selectAll("*").remove();
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000052
Steven Burrowse3a18842016-09-22 15:33:33 +010053 if (mapFilePath === '*countries') {
Steven Burrowse3a18842016-09-22 15:33:33 +010054 cfilter = countryFilters[mapId] || countryFilters.uk;
Steven Burrowse7cc3082016-09-27 11:24:58 -070055 loadMap = ms.loadMapRegionInto;
Steven Burrowse3a18842016-09-22 15:33:33 +010056 }
57
Steven Burrowsb43c1a92017-03-07 17:13:28 +000058 promise = loadMap(this.node(), mapFilePath, mapId, {
Steven Burrowsd576f642016-09-26 10:40:51 -070059 countryFilters: cfilter,
Steven Burrows7d1efef2017-03-25 02:07:43 +000060 adjustScale: mapScale || 1,
Steven Burrowsd576f642016-09-26 10:40:51 -070061 shading: ''
62 });
63
Steven Burrowse3a18842016-09-22 15:33:33 +010064 return promise;
65 }
66
Steven Burrowsd576f642016-09-26 10:40:51 -070067
Steven Burrows1c5c8612016-10-05 13:45:13 -050068 function resetZoom() {
69 zoomer.reset();
70 }
71
Simon Huntc43a59d2017-04-05 13:56:13 -070072 function zoomCallback(sc, tr) {
73 // keep the map lines constant width while zooming
74 this.node().style('stroke-width', (2.0 / sc) + 'px');
75 }
76
Steven Burrows091a1b12017-04-10 09:52:35 -070077 function getCurrentMap() {
78 return currentMap;
79 }
80
Steven Burrowse3a18842016-09-22 15:33:33 +010081 angular.module('ovTopo2')
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000082 .factory('Topo2MapService', [
Simon Hunt95f4b422017-03-03 13:49:05 -080083 '$log', '$location', 'Topo2ViewController', 'PrefsService',
Steven Burrows448468c2017-04-13 16:09:30 -070084 'MapService', 'FlashService', 'SvgUtilService', 'Topo2ZoomService',
Steven Burrowse3a18842016-09-22 15:33:33 +010085
Simon Hunt95f4b422017-03-03 13:49:05 -080086 function (_$log_, _$loc_, ViewController, _ps_,
Steven Burrows448468c2017-04-13 16:09:30 -070087 _ms_, _flash_, _sus_, _t2zs_) {
Steven Burrowse3a18842016-09-22 15:33:33 +010088
Simon Hunt95f4b422017-03-03 13:49:05 -080089 $log = _$log_;
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000090 $loc = _$loc_;
91 ps = _ps_;
92 ms = _ms_;
93 flash = _flash_;
94 sus = _sus_;
Steven Burrowsb43c1a92017-03-07 17:13:28 +000095 t2zs = _t2zs_;
Steven Burrows86b74fc2017-02-22 00:15:16 +000096
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000097 var MapLayer = ViewController.extend({
Steven Burrows1c5c8612016-10-05 13:45:13 -050098
Simon Hunt95f4b422017-03-03 13:49:05 -080099 id: 'topo2-map',
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000100 displayName: 'Map',
Steven Burrowse3a18842016-09-22 15:33:33 +0100101
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000102 init: init,
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000103 setUpMap: setUpMap,
Simon Huntc43a59d2017-04-05 13:56:13 -0700104 resetZoom: resetZoom,
Steven Burrows091a1b12017-04-10 09:52:35 -0700105 zoomCallback: zoomCallback,
106 getCurrentMap: getCurrentMap
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000107 });
108
109 return instance || new MapLayer();
110 }
111 ]);
Steven Burrowse3a18842016-09-22 15:33:33 +0100112})();