diff --git a/frontend-js/src/main/js/map/overlay/UserDbOverlay.js b/frontend-js/src/main/js/map/overlay/UserDbOverlay.js index 0eaebd13844670e9c9aac3c7a07a87303d76f520..1e0b6ef9cdd431a0009feb795db410c50821f239 100644 --- a/frontend-js/src/main/js/map/overlay/UserDbOverlay.js +++ b/frontend-js/src/main/js/map/overlay/UserDbOverlay.js @@ -37,10 +37,11 @@ UserDbOverlay.prototype.getDetailDataByIdentifiedElement = function(element) { return model.getByIdentifiedElement(element, true); }; -UserDbOverlay.prototype._createIdentifiedElements = function(params, sourceArray) { +UserDbOverlay.prototype._createIdentifiedElements = function(params, sourceArray, mustBeUndefined) { var self = this; var result = []; var promises = []; + var mustBeDefined = !mustBeUndefined; for (var i = 0; i < params.length; i++) { var singleElementParam = params[i]; var element = new IdentifiedElement(singleElementParam.element); @@ -52,9 +53,12 @@ UserDbOverlay.prototype._createIdentifiedElements = function(params, sourceArray element.setLineWeight(singleElementParam.options.lineWeight); element.setLineOpacity(singleElementParam.options.lineOpacity); } - if (sourceArray[element.getType()][element.getId()] !== undefined) { + if (sourceArray[element.getType()][element.getId()] !== undefined && mustBeUndefined) { return Promise.reject(new Error("Element already highlighted: " + element.getId())); } + if (sourceArray[element.getType()][element.getId()] === undefined && mustBeDefined) { + return Promise.reject(new Error("Element is not highlighted: " + element.getId())); + } result.push(element); var submap = self.getMap().getSubmapById(element.getModelId()); if (submap === null) { @@ -79,7 +83,7 @@ UserDbOverlay.prototype.addMarker = function(params) { if (params.length === undefined) { params = [ params ]; } - return self._createIdentifiedElements(params, self._markerIdentifiedElements).then(function(elements) { + return self._createIdentifiedElements(params, self._markerIdentifiedElements, true).then(function(elements) { for (var i = 0; i < elements.length; i++) { var element = elements[i]; self._markerIdentifiedElements[element.getType()][element.getId()] = element; @@ -105,7 +109,7 @@ UserDbOverlay.prototype.addSurface = function(params) { params = [ params ]; } - return self._createIdentifiedElements(params, self._surfaceIdentifiedElements).then(function(elements) { + return self._createIdentifiedElements(params, self._surfaceIdentifiedElements, true).then(function(elements) { for (var i = 0; i < elements.length; i++) { var element = elements[i]; self._surfaceIdentifiedElements[element.getType()][element.getId()] = element; @@ -127,32 +131,26 @@ UserDbOverlay.prototype.removeMarker = function(params) { var self = this; self.disableAddRemoveElements(); - var elements = []; if (params.length === undefined) { params = [ params ]; } - var i, element; - for (i = 0; i < params.length; i++) { - var singleElementParam = params[i]; - element = new IdentifiedElement(singleElementParam.element); - if (self._markerIdentifiedElements[element.getType()][element.getId()] === undefined) { - self.enableAddRemoveElements(); - return Promise.reject(new Error("Element is not highlighted: " + element.getId())); - } - elements.push(element); - } - for (i = 0; i < elements.length; i++) { - element = elements[i]; - self._markerIdentifiedElements[element.getType()][element.getId()] = undefined; - delete self._markerIdentifiedElements[element.getType()][element.getId()]; - } - return self.getIdentifiedElements().then(function(elements) { + return self._createIdentifiedElements(params, self._markerIdentifiedElements, false).then(function(elements) { + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + self._markerIdentifiedElements[element.getType()][element.getId()] = undefined; + delete self._markerIdentifiedElements[element.getType()][element.getId()]; + } + return self.getIdentifiedElements(); + }).then(function(elements) { self.enableAddRemoveElements(); return self.callListeners("onSearch", { fitBounds : false, identifiedElements : elements, }); + }).then(null, function(error) { + self.enableAddRemoveElements(); + return Promise.reject(error); }); }; @@ -164,23 +162,14 @@ UserDbOverlay.prototype.removeSurface = function(params) { if (params.length === undefined) { params = [ params ]; } - var i, element; - for (i = 0; i < params.length; i++) { - var singleElementParam = params[i]; - element = new IdentifiedElement(singleElementParam.element); - if (self._surfaceIdentifiedElements[element.getType()][element.getId()] === undefined) { - self.enableAddRemoveElements(); - return Promise.reject(new Error("Element is not highlighted: " + element.getId())); + return self._createIdentifiedElements(params, self._surfaceIdentifiedElements, false).then(function(elements) { + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + self._surfaceIdentifiedElements[element.getType()][element.getId()] = undefined; + delete self._surfaceIdentifiedElements[element.getType()][element.getId()]; } - elements.push(element); - } - for (i = 0; i < elements.length; i++) { - element = elements[i]; - self._surfaceIdentifiedElements[element.getType()][element.getId()] = undefined; - delete self._surfaceIdentifiedElements[element.getType()][element.getId()]; - } - - return self.getIdentifiedElements().then(function(elements) { + return self.getIdentifiedElements(); + }).then(function(elements) { self.enableAddRemoveElements(); return self.callListeners("onSearch", { fitBounds : false,