GUI -- MapService: changed to cache promises with attached meta data.
- unit tests for cached promises still WIP.
Change-Id: Ibe52cf3e83ed5753ccc12581b52fa1f640354e60
diff --git a/web/gui/src/main/webapp/app/fw/svg/glyph.js b/web/gui/src/main/webapp/app/fw/svg/glyph.js
index 621436c..844d0f3 100644
--- a/web/gui/src/main/webapp/app/fw/svg/glyph.js
+++ b/web/gui/src/main/webapp/app/fw/svg/glyph.js
@@ -139,7 +139,7 @@
function register(viewBox, data, overwrite) {
var dmap = d3.map(data),
dups = [],
- ok, msg;
+ ok;
dmap.forEach(function (key, value) {
if (!overwrite && glyphs.get(key)) {
diff --git a/web/gui/src/main/webapp/app/fw/svg/map.js b/web/gui/src/main/webapp/app/fw/svg/map.js
index c736149..a14a038 100644
--- a/web/gui/src/main/webapp/app/fw/svg/map.js
+++ b/web/gui/src/main/webapp/app/fw/svg/map.js
@@ -42,12 +42,12 @@
'use strict';
// injected references
- var $log, fs;
+ var $log, $http, $q, fs;
// internal state
var maps = d3.map(),
msgMs = 'MapService.',
- bundledUrlPrefix = 'data/map/';
+ bundledUrlPrefix = '../data/map/';
function getUrl(id) {
if (id[0] === '*') {
@@ -57,38 +57,61 @@
}
angular.module('onosSvg')
- .factory('MapService', ['$log', 'FnService',
+ .factory('MapService', ['$log', '$http', '$q', 'FnService',
- function (_$log_, _fs_) {
+ function (_$log_, _$http_, _$q_, _fs_) {
$log = _$log_;
+ $http = _$http_;
+ $q = _$q_;
fs = _fs_;
function clearCache() {
maps = d3.map();
}
+ // NOTE: It is expected that mapLayer is a D3 selection of the
+ // <g> element (a child of zoomLayer) into which the map
+ // path data will be rendered.
+ function renderMap(mapLayer) {
+ // TODO ---
+ $log.log('Hey, let\'s render the map...');
+ }
+
function fetchGeoMap(id) {
if (!fs.isS(id)) {
return null;
}
+ var url = getUrl(id);
- var geomap = maps.get(id);
+ var promise = maps.get(id);
- if (!geomap) {
+ if (!promise) {
// need to fetch the data and build the object...
- geomap = {
- id: id,
- url: getUrl(id),
- wasCached: false
- };
- // TODO: use $http service to load map data asynchronously
+ var deferred = $q.defer();
+ promise = deferred.promise;
- maps.set(id, geomap);
+ $http.get(url)
+ .success(function (data) {
+ deferred.resolve(data);
+ })
+ .error(function (msg, code) {
+ deferred.reject(msg);
+ $log.warn(msg, code);
+ });
+
+ promise.meta = {
+ id: id,
+ url: url,
+ wasCached: false,
+ render: renderMap
+ };
+
+ maps.set(id, promise);
} else {
- geomap.wasCached = true;
+ promise.meta.wasCached = true;
}
- return geomap;
+ return promise;
}
return {