blob: c4b791233e5c926e5ef10dbeed7c31b176d35699 [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 Burrows9053fdb2017-04-12 12:08:16 -070038 currentMap = null;
Steven Burrowse3a18842016-09-22 15:33:33 +010039 }
40
Steven Burrowsb43c1a92017-03-07 17:13:28 +000041 function setUpMap(mapId, mapFilePath, mapScale) {
42
Steven Burrows091a1b12017-04-10 09:52:35 -070043 if (currentMap === mapId) {
44 return new Promise(function(resolve) {
45 resolve();
46 });
47 }
48
49 currentMap = mapId;
50
Steven Burrowsb43c1a92017-03-07 17:13:28 +000051 var loadMap = ms.loadMapInto,
Steven Burrowse3a18842016-09-22 15:33:33 +010052 promise, cfilter;
53
Steven Burrowsb43c1a92017-03-07 17:13:28 +000054 this.node().selectAll("*").remove();
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000055
Steven Burrowse3a18842016-09-22 15:33:33 +010056 if (mapFilePath === '*countries') {
Steven Burrowse3a18842016-09-22 15:33:33 +010057 cfilter = countryFilters[mapId] || countryFilters.uk;
Steven Burrowse7cc3082016-09-27 11:24:58 -070058 loadMap = ms.loadMapRegionInto;
Steven Burrowse3a18842016-09-22 15:33:33 +010059 }
60
Steven Burrowsb43c1a92017-03-07 17:13:28 +000061 promise = loadMap(this.node(), mapFilePath, mapId, {
Steven Burrowsd576f642016-09-26 10:40:51 -070062 countryFilters: cfilter,
Steven Burrows7d1efef2017-03-25 02:07:43 +000063 adjustScale: mapScale || 1,
Steven Burrowsd576f642016-09-26 10:40:51 -070064 shading: ''
65 });
66
Steven Burrowse3a18842016-09-22 15:33:33 +010067 return promise;
68 }
69
Simon Hunt95f4b422017-03-03 13:49:05 -080070 // TODO: deprecated - maps are defined per layout on the server side.
Steven Burrowse3a18842016-09-22 15:33:33 +010071 function setMap(map) {
Simon Hunt95f4b422017-03-03 13:49:05 -080072 ps.setPrefs('topo2_mapid', map);
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000073 return setUpMap.bind(this)();
Steven Burrowse3a18842016-09-22 15:33:33 +010074 }
75
Simon Hunt95f4b422017-03-03 13:49:05 -080076 // TODO: deprecated - map selection does not make sense in Topo2
Steven Burrowsd576f642016-09-26 10:40:51 -070077 function openMapSelection() {
Simon Hunt95f4b422017-03-03 13:49:05 -080078 $log.warn('openMapSelection DISABLED');
Steven Burrowsd576f642016-09-26 10:40:51 -070079
Simon Hunt95f4b422017-03-03 13:49:05 -080080 // MapSelectionDialog.prototype.currentMap = currentMap;
81 //
82 // new MapSelectionDialog({
83 // okHandler: function (preferences) {
84 // setMap(preferences);
85 // }
86 // }).open();
Steven Burrowsd576f642016-09-26 10:40:51 -070087 }
88
Steven Burrows1c5c8612016-10-05 13:45:13 -050089 function resetZoom() {
90 zoomer.reset();
91 }
92
Simon Huntc43a59d2017-04-05 13:56:13 -070093 function zoomCallback(sc, tr) {
94 // keep the map lines constant width while zooming
95 this.node().style('stroke-width', (2.0 / sc) + 'px');
96 }
97
Steven Burrows091a1b12017-04-10 09:52:35 -070098 function getCurrentMap() {
99 return currentMap;
100 }
101
Steven Burrowse3a18842016-09-22 15:33:33 +0100102 angular.module('ovTopo2')
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000103 .factory('Topo2MapService', [
Simon Hunt95f4b422017-03-03 13:49:05 -0800104 '$log', '$location', 'Topo2ViewController', 'PrefsService',
105 'MapService', 'FlashService', 'SvgUtilService', 'Topo2CountryFilters',
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000106 'Topo2MapDialog', 'Topo2ZoomService',
Steven Burrowse3a18842016-09-22 15:33:33 +0100107
Simon Hunt95f4b422017-03-03 13:49:05 -0800108 function (_$log_, _$loc_, ViewController, _ps_,
109 _ms_, _flash_, _sus_, _t2cf_,
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000110 _t2md_, _t2zs_) {
Steven Burrowse3a18842016-09-22 15:33:33 +0100111
Simon Hunt95f4b422017-03-03 13:49:05 -0800112 $log = _$log_;
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000113 $loc = _$loc_;
114 ps = _ps_;
115 ms = _ms_;
116 flash = _flash_;
117 sus = _sus_;
118 countryFilters = _t2cf_;
119 MapSelectionDialog = _t2md_;
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000120 t2zs = _t2zs_;
Steven Burrows86b74fc2017-02-22 00:15:16 +0000121
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000122 var MapLayer = ViewController.extend({
Steven Burrows1c5c8612016-10-05 13:45:13 -0500123
Simon Hunt95f4b422017-03-03 13:49:05 -0800124 id: 'topo2-map',
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000125 displayName: 'Map',
Steven Burrowse3a18842016-09-22 15:33:33 +0100126
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000127 init: init,
128 setMap: setMap,
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000129 setUpMap: setUpMap,
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000130 openMapSelection: openMapSelection,
Simon Huntc43a59d2017-04-05 13:56:13 -0700131 resetZoom: resetZoom,
Steven Burrows091a1b12017-04-10 09:52:35 -0700132 zoomCallback: zoomCallback,
133 getCurrentMap: getCurrentMap
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000134 });
135
136 return instance || new MapLayer();
137 }
138 ]);
Steven Burrowse3a18842016-09-22 15:33:33 +0100139})();