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

promises simplified

parent 87616b70
No related branches found
No related tags found
1 merge request!5Frontend refactor
......@@ -14,137 +14,134 @@ var Reaction = require('../data/Reaction');
var ServerConnector = require('../../ServerConnector');
function SearchDbOverlay(params) {
params.iconType= "marker";
params.iconType = "marker";
params.iconColorStart = 0;
// call super constructor
AbstractDbOverlay.call(this, params);
}
SearchDbOverlay.prototype = Object.create(AbstractDbOverlay.prototype);
SearchDbOverlay.prototype.constructor = SearchDbOverlay;
SearchDbOverlay.prototype.getElementsByQuery = function(query) {
var self = this;
return new Promise(function(resolve, reject){
var i;
var queryId = null;
var queries =self.getQueries();
for (i=0;i<queries.length;i++) {
if (queries[i]===query) {
queryId = i;
}
}
if (queryId===null) {
throw new Error("Invalid query: "+query);
}
var elements = self._elementsByQuery[query];
var promises = [];
for (i=0;i<elements.length;i++) {
var model = self.getMap().getSubmodelById(elements[0].getModelId()).getModel();
promises.push(model.getByIdentifiedElement(elements[i], true));
var i;
var queryId = null;
var queries = self.getQueries();
for (i = 0; i < queries.length; i++) {
if (queries[i] === query) {
queryId = i;
}
return Promise.all(promises).then(function(fullElements){
var result =[];
var iconCounter=1;
for (var i=0;i<fullElements.length;i++){
var element = fullElements[i];
var icon;
if (element instanceof Alias) {
icon = self.getIcon(queryId, iconCounter++ );
} else if (!(element instanceof Reaction)) {
throw new Error("Unknown element type: "+element.getType());
}
result.push({element:element, icon:icon});
}
if (queryId === null) {
throw new Error("Invalid query: " + query);
}
var elements = self._elementsByQuery[query];
var promises = [];
for (i = 0; i < elements.length; i++) {
var model = self.getMap().getSubmodelById(elements[0].getModelId()).getModel();
promises.push(model.getByIdentifiedElement(elements[i], true));
}
return Promise.all(promises).then(function(fullElements) {
var result = [];
var iconCounter = 1;
for (var i = 0; i < fullElements.length; i++) {
var element = fullElements[i];
var icon;
if (element instanceof Alias) {
icon = self.getIcon(queryId, iconCounter++);
} else if (!(element instanceof Reaction)) {
throw new Error("Unknown element type: " + element.getType());
}
resolve(result);
}).catch(reject);
result.push({
element : element,
icon : icon
});
}
return result;
});
};
SearchDbOverlay.prototype.searchByCoordinates = function(modelId, coordinates) {
var self = this;
var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES, modelId, coordinates);
ServerConnector.getSessionData().setSearchQuery(query);
return new Promise(function(resolve, reject) {
self.setQueries([query]);
if (self._elementsByQuery[query] !== undefined) {
return self.callListeners('onSearch').then(function(){
resolve(self._elementsByQuery[query]);
}).catch(reject);
} else {
return ServerConnector.getClosestElementsByCoordinates({
modelId:modelId, coordinates: coordinates, count: 1
}).then(function(elements) {
self._elementsByQuery[query] = elements;
if (elements[0].getType()==="REACTION") {
var model = self.getMap().getSubmodelById(elements[0].getModelId()).getModel();
return model.getReactionById(elements[0].getId(), true).then(function(reaction){
var i=0;
var reactionElements = reaction.getElements();
for (i=0;i<reactionElements.length;i++) {
self._elementsByQuery[query].push(new IdentifiedElement(reactionElements[i]));
}
});
} else {
return null;
}
}).then(function(){
return self.callListeners('onSearch');
}).then(function(){
resolve(self._elementsByQuery[query]);
}).catch(reject);
}
});
self.setQueries([ query ]);
if (self._elementsByQuery[query] !== undefined) {
return self.callListeners('onSearch').then(function() {
Promise.resolve(self._elementsByQuery[query]);
});
} else {
return ServerConnector.getClosestElementsByCoordinates({
modelId : modelId,
coordinates : coordinates,
count : 1
}).then(function(elements) {
self._elementsByQuery[query] = elements;
if (elements[0].getType() === "REACTION") {
var model = self.getMap().getSubmodelById(elements[0].getModelId()).getModel();
return model.getReactionById(elements[0].getId(), true).then(function(reaction) {
var i = 0;
var reactionElements = reaction.getElements();
for (i = 0; i < reactionElements.length; i++) {
self._elementsByQuery[query].push(new IdentifiedElement(reactionElements[i]));
}
});
} else {
return null;
}
}).then(function() {
return self.callListeners('onSearch');
}).then(function() {
return self._elementsByQuery[query];
});
}
};
SearchDbOverlay.prototype.searchBySingleQuery = function(originalQuery, perfect) {
var self = this;
return new Promise(function(resolve, reject) {
var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery, perfect);
if (self._elementsByQuery[query] !== undefined) {
resolve(self._elementsByQuery[query]);
} else {
return ServerConnector.getElementsByQuery({
query:originalQuery,
perfectMatch: perfect
}).then(function(elements) {
var result = [];
for (var i=0;i<elements.length;i++) {
result.push(new IdentifiedElement(elements[i]));
}
self._elementsByQuery[query]=result;
return self.getMap().fetchIdentifiedElements(result, true);
}).then(function(){
resolve(self._elementsByQuery[query]);
}).catch(reject);
}
});
var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery, perfect);
if (self._elementsByQuery[query] !== undefined) {
Promise.resolve(self._elementsByQuery[query]);
} else {
return ServerConnector.getElementsByQuery({
query : originalQuery,
perfectMatch : perfect
}).then(function(elements) {
var result = [];
for (var i = 0; i < elements.length; i++) {
result.push(new IdentifiedElement(elements[i]));
}
self._elementsByQuery[query] = result;
return self.getMap().fetchIdentifiedElements(result, true);
}).then(function() {
return self._elementsByQuery[query];
});
}
};
SearchDbOverlay.prototype.getIdentifiedElements = function(){
SearchDbOverlay.prototype.getIdentifiedElements = function() {
var self = this;
return new Promise(function(resolve){
return new Promise(function(resolve) {
var queries = self.getQueries();
var result = [];
for (var i=0;i<queries.length;i++) {
for (var i = 0; i < queries.length; i++) {
var query = queries[i];
var elements = self._elementsByQuery[query];
var iconCounter =1;
for (var j=0;j<elements.length;j++) {
var iconCounter = 1;
for (var j = 0; j < elements.length; j++) {
var element = elements[j];
var ie = new IdentifiedElement(element);
if (element.getType() === "ALIAS") {
ie.setIcon(self.getIcon(i, iconCounter++));
} else if (element.getType() !== "REACTION") {
throw new Error("Unknown element type: "+element.getType());
throw new Error("Unknown element type: " + element.getType());
}
result.push(ie);
}
......
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