blob: 0f559fa8bf5ba8cffac4d24f14bb0dd24a6af8bd [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 Burrowsea1d1ec2017-02-23 15:39:25 +000032 var instance, mapG, zoomLayer, zoomer;
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
Simon Hunt95f4b422017-03-03 13:49:05 -080040 // TODO: to be re-worked: map-id, filePath, scale/pan to be passed as params
Steven Burrowsb43c1a92017-03-07 17:13:28 +000041 function setUpMap(mapId, mapFilePath, mapScale) {
42
43 var loadMap = ms.loadMapInto,
Steven Burrowse3a18842016-09-22 15:33:33 +010044 promise, cfilter;
45
Steven Burrowsb43c1a92017-03-07 17:13:28 +000046 this.node().selectAll("*").remove();
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000047
Steven Burrowse3a18842016-09-22 15:33:33 +010048 if (mapFilePath === '*countries') {
Steven Burrowse3a18842016-09-22 15:33:33 +010049 cfilter = countryFilters[mapId] || countryFilters.uk;
Steven Burrowse7cc3082016-09-27 11:24:58 -070050 loadMap = ms.loadMapRegionInto;
Steven Burrowse3a18842016-09-22 15:33:33 +010051 }
52
Steven Burrowsb43c1a92017-03-07 17:13:28 +000053 promise = loadMap(this.node(), mapFilePath, mapId, {
Steven Burrowsd576f642016-09-26 10:40:51 -070054 countryFilters: cfilter,
55 adjustScale: mapScale,
56 shading: ''
57 });
58
Steven Burrowse3a18842016-09-22 15:33:33 +010059 return promise;
60 }
61
Simon Hunt95f4b422017-03-03 13:49:05 -080062 // TODO: deprecated - the layout will tell us which map
63 // no longer stored in user preferences
Steven Burrowse3a18842016-09-22 15:33:33 +010064 function currentMap() {
65 return ps.getPrefs(
Simon Hunt95f4b422017-03-03 13:49:05 -080066 'topo2_mapid',
Steven Burrowse3a18842016-09-22 15:33:33 +010067 {
68 mapid: 'usa',
69 mapscale: 1,
70 mapfilepath: '*continental_us',
71 tint: 'off'
72 },
73 $loc.search()
74 );
75 }
76
Simon Hunt95f4b422017-03-03 13:49:05 -080077 // TODO: deprecated - maps are defined per layout on the server side.
Steven Burrowse3a18842016-09-22 15:33:33 +010078 function setMap(map) {
Simon Hunt95f4b422017-03-03 13:49:05 -080079 ps.setPrefs('topo2_mapid', map);
Steven Burrowsea1d1ec2017-02-23 15:39:25 +000080 return setUpMap.bind(this)();
Steven Burrowse3a18842016-09-22 15:33:33 +010081 }
82
Simon Hunt95f4b422017-03-03 13:49:05 -080083 // TODO: deprecated - map selection does not make sense in Topo2
Steven Burrowsd576f642016-09-26 10:40:51 -070084 function openMapSelection() {
Simon Hunt95f4b422017-03-03 13:49:05 -080085 $log.warn('openMapSelection DISABLED');
Steven Burrowsd576f642016-09-26 10:40:51 -070086
Simon Hunt95f4b422017-03-03 13:49:05 -080087 // MapSelectionDialog.prototype.currentMap = currentMap;
88 //
89 // new MapSelectionDialog({
90 // okHandler: function (preferences) {
91 // setMap(preferences);
92 // }
93 // }).open();
Steven Burrowsd576f642016-09-26 10:40:51 -070094 }
95
Steven Burrows1c5c8612016-10-05 13:45:13 -050096 function resetZoom() {
97 zoomer.reset();
98 }
99
Steven Burrowse3a18842016-09-22 15:33:33 +0100100 angular.module('ovTopo2')
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000101 .factory('Topo2MapService', [
Simon Hunt95f4b422017-03-03 13:49:05 -0800102 '$log', '$location', 'Topo2ViewController', 'PrefsService',
103 'MapService', 'FlashService', 'SvgUtilService', 'Topo2CountryFilters',
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000104 'Topo2MapDialog', 'Topo2ZoomService',
Steven Burrowse3a18842016-09-22 15:33:33 +0100105
Simon Hunt95f4b422017-03-03 13:49:05 -0800106 function (_$log_, _$loc_, ViewController, _ps_,
107 _ms_, _flash_, _sus_, _t2cf_,
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000108 _t2md_, _t2zs_) {
Steven Burrowse3a18842016-09-22 15:33:33 +0100109
Simon Hunt95f4b422017-03-03 13:49:05 -0800110 $log = _$log_;
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000111 $loc = _$loc_;
112 ps = _ps_;
113 ms = _ms_;
114 flash = _flash_;
115 sus = _sus_;
116 countryFilters = _t2cf_;
117 MapSelectionDialog = _t2md_;
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000118 t2zs = _t2zs_;
Steven Burrows86b74fc2017-02-22 00:15:16 +0000119
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000120 var MapLayer = ViewController.extend({
Steven Burrows1c5c8612016-10-05 13:45:13 -0500121
Simon Hunt95f4b422017-03-03 13:49:05 -0800122 id: 'topo2-map',
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000123 displayName: 'Map',
Steven Burrowse3a18842016-09-22 15:33:33 +0100124
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000125 init: init,
126 setMap: setMap,
Steven Burrowsb43c1a92017-03-07 17:13:28 +0000127 setUpMap: setUpMap,
Steven Burrowsea1d1ec2017-02-23 15:39:25 +0000128 openMapSelection: openMapSelection,
129 resetZoom: resetZoom
130 });
131
132 return instance || new MapLayer();
133 }
134 ]);
Steven Burrowse3a18842016-09-22 15:33:33 +0100135})();