Skip to content
Snippets Groups Projects
Commit af740131 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

when highlighting element check against element existence is run and proper exception is thrown

parent ce15dbbf
No related branches found
No related tags found
1 merge request!34Resolve "when highligting element that doesn't exist throw an error"
"use strict";
/* exported logger */
var logger = require('./logger');
function InvalidArgumentError(message) {
this.name = "InvalidArgumentError";
this.message = message;
this.stack = (new Error()).stack;
}
module.exports = InvalidArgumentError;
...@@ -7,6 +7,7 @@ var logger = require('../../logger'); ...@@ -7,6 +7,7 @@ var logger = require('../../logger');
var AbstractDbOverlay = require('./AbstractDbOverlay'); var AbstractDbOverlay = require('./AbstractDbOverlay');
var IdentifiedElement = require('../data/IdentifiedElement'); var IdentifiedElement = require('../data/IdentifiedElement');
var InvalidArgumentError = require('../../InvalidArgumentError');
var Promise = require("bluebird"); var Promise = require("bluebird");
...@@ -36,37 +37,59 @@ UserDbOverlay.prototype.getDetailDataByIdentifiedElement = function(element) { ...@@ -36,37 +37,59 @@ UserDbOverlay.prototype.getDetailDataByIdentifiedElement = function(element) {
return model.getByIdentifiedElement(element, true); return model.getByIdentifiedElement(element, true);
}; };
UserDbOverlay.prototype.addMarker = function(params) { UserDbOverlay.prototype._createIdentifiedElements = function(params, sourceArray) {
var self = this; var self = this;
var result = [];
var promises = [];
for (var i = 0; i < params.length; i++) {
var singleElementParam = params[i];
var element = new IdentifiedElement(singleElementParam.element);
element.setIcon(singleElementParam.icon);
if (singleElementParam.options !== undefined) {
element.setColor(singleElementParam.options.color);
element.setOpacity(singleElementParam.options.opacity);
element.setLineColor(singleElementParam.options.lineColor);
element.setLineWeight(singleElementParam.options.lineWeight);
element.setLineOpacity(singleElementParam.options.lineOpacity);
}
if (sourceArray[element.getType()][element.getId()] !== undefined) {
return Promise.reject(new Error("Element already highlighted: " + element.getId()));
}
result.push(element);
promises.push(self.getMap().getSubmapById(element.getModelId()).getModel().getByIdentifiedElement(element));
}
return Promise.all(promises).then(function(elementsFromModel) {
for (var i = 0; i < elementsFromModel.length; i++) {
if (elementsFromModel[i] === undefined || elementsFromModel[i] === null) {
return Promise.reject(new InvalidArgumentError("Element doesn't exist: " + result[i].getId()));
}
}
return result;
})
};
UserDbOverlay.prototype.addMarker = function(params) {
var self = this;
self.disableAddRemoveElements(); self.disableAddRemoveElements();
var elements = [];
if (params.length === undefined) { if (params.length === undefined) {
params = [ params ]; params = [ params ];
} }
var i, element; return self._createIdentifiedElements(params, self._markerIdentifiedElements).then(function(elements) {
for (i = 0; i < params.length; i++) { for (var i = 0; i < elements.length; i++) {
var singleElementParam = params[i]; var element = elements[i];
element = new IdentifiedElement(singleElementParam.element); self._markerIdentifiedElements[element.getType()][element.getId()] = element;
element.setIcon(singleElementParam.icon);
if (self._markerIdentifiedElements[element.getType()][element.getId()] !== undefined) {
self.enableAddRemoveElements();
return Promise.reject(new Error("Element already highlighted: " + element.getId()));
} }
elements.push(element); return self.getIdentifiedElements();
} }).then(function(elements) {
for (i = 0; i < elements.length; i++) {
element = elements[i];
self._markerIdentifiedElements[element.getType()][element.getId()] = element;
}
return self.getIdentifiedElements().then(function(elements) {
self.enableAddRemoveElements(); self.enableAddRemoveElements();
return self.callListeners("onSearch", { return self.callListeners("onSearch", {
fitBounds : false, fitBounds : false,
identifiedElements : elements, identifiedElements : elements,
}); });
}).then(null, function(error) {
self.enableAddRemoveElements();
return Promise.reject(error);
}); });
}; };
...@@ -74,38 +97,25 @@ UserDbOverlay.prototype.addSurface = function(params) { ...@@ -74,38 +97,25 @@ UserDbOverlay.prototype.addSurface = function(params) {
var self = this; var self = this;
self.disableAddRemoveElements(); self.disableAddRemoveElements();
var elements = [];
if (params.length === undefined) { if (params.length === undefined) {
params = [ params ]; params = [ params ];
} }
var i, element;
for (i = 0; i < params.length; i++) {
var singleElementParam = params[i];
element = new IdentifiedElement(singleElementParam.element);
if (singleElementParam.options !== undefined) {
element.setColor(singleElementParam.options.color);
element.setOpacity(singleElementParam.options.opacity);
element.setLineColor(singleElementParam.options.lineColor);
element.setLineWeight(singleElementParam.options.lineWeight);
element.setLineOpacity(singleElementParam.options.lineOpacity);
}
if (self._surfaceIdentifiedElements[element.getType()][element.getId()] !== undefined) {
self.enableAddRemoveElements();
return Promise.reject(new Error("Element already highlighted: " + element.getId()));
}
elements.push(element);
}
for (i = 0; i < elements.length; i++) {
element = elements[i];
self._surfaceIdentifiedElements[element.getType()][element.getId()] = element;
}
return self.getIdentifiedElements().then(function(elements) { return self._createIdentifiedElements(params, self._surfaceIdentifiedElements).then(function(elements) {
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
self._surfaceIdentifiedElements[element.getType()][element.getId()] = element;
}
return self.getIdentifiedElements();
}).then(function(elements) {
self.enableAddRemoveElements(); self.enableAddRemoveElements();
return self.callListeners("onSearch", { return self.callListeners("onSearch", {
fitBounds : false, fitBounds : false,
identifiedElements : elements, identifiedElements : elements,
}); });
}).then(null, function(error) {
self.enableAddRemoveElements();
return Promise.reject(error);
}); });
}; };
......
...@@ -4,6 +4,8 @@ var Helper = require('../../Helper'); ...@@ -4,6 +4,8 @@ var Helper = require('../../Helper');
var logger = require('../../logger'); var logger = require('../../logger');
var CustomMap = require('../../../../main/js/map//CustomMap');
var InvalidArgumentError = require('../../../../main/js/InvalidArgumentError');
var UserDbOverlay = require('../../../../main/js/map/overlay/UserDbOverlay'); var UserDbOverlay = require('../../../../main/js/map/overlay/UserDbOverlay');
var assert = require('assert'); var assert = require('assert');
...@@ -27,30 +29,60 @@ describe('UserDbOverlay', function() { ...@@ -27,30 +29,60 @@ describe('UserDbOverlay', function() {
}); });
it("clear", function() { it("clear", function() {
var map = helper.createCustomMap(); var overlay;
var oc = new UserDbOverlay({ return ServerConnector.getProject().then(function(project) {
map : map, var options = helper.createCustomMapOptions(project);
name : 'user' var map = new CustomMap(options);
}); overlay = new UserDbOverlay({
return oc.addMarker({ map : map,
element : { name : 'user'
id : 329171, });
modelId : 15781, return overlay.addMarker({
type : "ALIAS" element : {
}, id : 329171,
options : { modelId : 15781,
type : "SURFACE" type : "ALIAS"
} },
options : {
type : "SURFACE"
}
});
}).then(function() { }).then(function() {
return oc.getIdentifiedElements(); return overlay.getIdentifiedElements();
}).then(function(elements) { }).then(function(elements) {
assert.equal(elements.length, 1); assert.equal(elements.length, 1);
return oc.clear(); return overlay.clear();
}).then(function() { }).then(function() {
return oc.getIdentifiedElements(); return overlay.getIdentifiedElements();
}).then(function(elements) { }).then(function(elements) {
assert.equal(elements.length, 0); assert.equal(elements.length, 0);
}); });
}); });
it("add unexisting object", function() {
var overlay;
return ServerConnector.getProject().then(function(project) {
var options = helper.createCustomMapOptions(project);
var map = new CustomMap(options);
overlay = new UserDbOverlay({
map : map,
name : 'user'
});
return overlay.addMarker({
element : {
id : -1,
modelId : 15781,
type : "ALIAS"
},
options : {
type : "SURFACE"
}
});
}).then(function() {
assert.ok(false, "Exception expected");
}, function(error) {
assert.ok(error instanceof InvalidArgumentError)
});
});
}); });
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment