blob: 06a588588e3361e17bfc8287d6e6d1752deea16c [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
28 // Injected Classes
29 var MapSelectionDialog;
Steven Burrowse3a18842016-09-22 15:33:33 +010030
31 // internal state
Steven Burrows091a1b12017-04-10 09:52:35 -070032 var instance, mapG, zoomLayer, zoomer, currentMap;
Steven Burrowse3a18842016-09-22 15:33:33 +010033
Steven Burrowsb43c1a92017-03-07 17:13:28 +000034 function init() {
35 this.appendElement('#topo2-background', 'g');
36 zoomLayer = d3.select('#topo2-zoomlayer');
37 zoomer = t2zs.getZoomer();
Steven Burrowse3a18842016-09-22 15:33:33 +010038 }
39
Steven Burrowsb43c1a92017-03-07 17:13:28 +000040 function setUpMap(mapId, mapFilePath, mapScale) {
41
Steven Burrows091a1b12017-04-10 09:52:35 -070042 if (currentMap === mapId) {
43 return new Promise(function(resolve) {
44 resolve();
45 });
46 }
47
48 currentMap = mapId;
49
Steven Burrowsb43c1a92017-03-07 17:13:28 +000050 var loadMap = ms.loadMapInto,
Steven Burrowse3a18842016-09-22 15:33:33 +010051 promise, cfilter;
52
Steven Burrowsb43c1a92017-03-07 17:13:28 +000053 this.node().selectAll("*").remove();
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000054
Steven Burrowse3a18842016-09-22 15:33:33 +010055 if (mapFilePath === '*countries') {
Steven Burrowse3a18842016-09-22 15:33:33 +010056 cfilter = countryFilters[mapId] || countryFilters.uk;
Steven Burrowse7cc3082016-09-27 11:24:58 -070057 loadMap = ms.loadMapRegionInto;
Steven Burrowse3a18842016-09-22 15:33:33 +010058 }
59
Steven Burrowsb43c1a92017-03-07 17:13:28 +000060 promise = loadMap(this.node(), mapFilePath, mapId, {
Steven Burrowsd576f642016-09-26 10:40:51 -070061 countryFilters: cfilter,
Steven Burrows7d1efef2017-03-25 02:07:43 +000062 adjustScale: mapScale || 1,
Steven Burrowsd576f642016-09-26 10:40:51 -070063 shading: ''
64 });
65
Steven Burrowse3a18842016-09-22 15:33:33 +010066 return promise;
67 }
68
Simon Hunt95f4b422017-03-03 13:49:05 -080069 // TODO: deprecated - maps are defined per layout on the server side.
Steven Burrowse3a18842016-09-22 15:33:33 +010070 function setMap(map) {
Simon Hunt95f4b422017-03-03 13:49:05 -080071 ps.setPrefs('topo2_mapid', map);
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000072 return setUpMap.bind(this)();
Steven Burrowse3a18842016-09-22 15:33:33 +010073 }
74
Simon Hunt95f4b422017-03-03 13:49:05 -080075 // TODO: deprecated - map selection does not make sense in Topo2
Steven Burrowsd576f642016-09-26 10:40:51 -070076 function openMapSelection() {
Simon Hunt95f4b422017-03-03 13:49:05 -080077 $log.warn('openMapSelection DISABLED');
Steven Burrowsd576f642016-09-26 10:40:51 -070078
Simon Hunt95f4b422017-03-03 13:49:05 -080079 // MapSelectionDialog.prototype.currentMap = currentMap;
80 //
81 // new MapSelectionDialog({
82 // okHandler: function (preferences) {
83 // setMap(preferences);
84 // }
85 // }).open();
Steven Burrowsd576f642016-09-26 10:40:51 -070086 }
87
Steven Burrows1c5c8612016-10-05 13:45:13 -050088 function resetZoom() {
89 zoomer.reset();
90 }
91
Simon Huntc43a59d2017-04-05 13:56:13 -070092 function zoomCallback(sc, tr) {
93 // keep the map lines constant width while zooming
94 this.node().style('stroke-width', (2.0 / sc) + 'px');
95 }
96
Steven Burrows091a1b12017-04-10 09:52:35 -070097 function getCurrentMap() {
98 return currentMap;
99 }
100
Steven Burrowse3a18842016-09-22 15:33:33 +0100101 angular.module('ovTopo2')
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000102 .factory('Topo2MapService', [
Simon Hunt95f4b422017-03-03 13:49:05 -0800103 '$log', '$location', 'Topo2ViewController', 'PrefsService',
104 'MapService', 'FlashService', 'SvgUtilService', 'Topo2CountryFilters',
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000105 'Topo2MapDialog', 'Topo2ZoomService',
Steven Burrowse3a18842016-09-22 15:33:33 +0100106
Simon Hunt95f4b422017-03-03 13:49:05 -0800107 function (_$log_, _$loc_, ViewController, _ps_,
108 _ms_, _flash_, _sus_, _t2cf_,
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000109 _t2md_, _t2zs_) {
Steven Burrowse3a18842016-09-22 15:33:33 +0100110
Simon Hunt95f4b422017-03-03 13:49:05 -0800111 $log = _$log_;
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000112 $loc = _$loc_;
113 ps = _ps_;
114 ms = _ms_;
115 flash = _flash_;
116 sus = _sus_;
117 countryFilters = _t2cf_;
118 MapSelectionDialog = _t2md_;
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000119 t2zs = _t2zs_;
Steven Burrows86b74fc2017-02-22 00:15:16 +0000120
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000121 var MapLayer = ViewController.extend({
Steven Burrows1c5c8612016-10-05 13:45:13 -0500122
Simon Hunt95f4b422017-03-03 13:49:05 -0800123 id: 'topo2-map',
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000124 displayName: 'Map',
Steven Burrowse3a18842016-09-22 15:33:33 +0100125
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000126 init: init,
127 setMap: setMap,
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000128 setUpMap: setUpMap,
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000129 openMapSelection: openMapSelection,
Simon Huntc43a59d2017-04-05 13:56:13 -0700130 resetZoom: resetZoom,
Steven Burrows091a1b12017-04-10 09:52:35 -0700131 zoomCallback: zoomCallback,
132 getCurrentMap: getCurrentMap
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000133 });
134
135 return instance || new MapLayer();
136 }
137 ]);
Steven Burrowse3a18842016-09-22 15:33:33 +0100138})();