-
Piotr Gawron authoredPiotr Gawron authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ServerConnector.js 37.63 KiB
"use strict";
/* exported logger */
var Promise = require("bluebird");
var logger = require('./logger');
var request = require('request');
var HttpStatus = require('http-status-codes');
var Alias = require('./map/data/Alias');
var Chemical = require('./map/data/Chemical');
var Comment = require('./map/data/Comment');
var Configuration = require('./Configuration');
var Drug = require('./map/data/Drug');
var ConfigurationType = require('./ConfigurationType');
var IdentifiedElement = require('./map/data/IdentifiedElement');
var InvalidCredentialsError = require('./InvalidCredentialsError');
var LayoutAlias = require('./map/data/LayoutAlias');
var LayoutData = require('./map/data/LayoutData');
var LayoutReaction = require('./map/data/LayoutReaction');
var MiRna = require('./map/data/MiRna');
var NetworkError = require('./NetworkError');
var Project = require('./map/data/Project');
var ProjectStatistics = require('./map/data/ProjectStatistics');
var Reaction = require('./map/data/Reaction');
var ReferenceGenome = require('./map/data/ReferenceGenome');
var SecurityError = require('./SecurityError');
var SessionData = require('./SessionData');
var User = require('./map/data/User');
var GuiConnector = require('./GuiConnector');
var ObjectWithListeners = require('./ObjectWithListeners');
/**
* This object contains methods that will communicate with server.
*/
var ServerConnector = new ObjectWithListeners();
ServerConnector.registerListenerType("onDataLoadStart");
ServerConnector.registerListenerType("onDataLoadStop");
ServerConnector._configurationParam = [];
ServerConnector.getMinOverlayColorInt = function() {
var self = this;
var userColor;
return self.getLoggedUser().then(function(user) {
userColor = user.getMinColor();
return self.getConfigurationParam(ConfigurationType.MIN_COLOR_VAL);
}).then(function(systemMinColor) {
var color = userColor;
if (userColor === null || userColor === undefined || userColor === "") {
color = systemMinColor;
}
color = parseInt(color, 16);
/* jslint bitwise: true */
color = (color & 0xFFFFFF);
return color;
});
};
ServerConnector.getSimpleOverlayColorInt = function() {
var self = this;
var userColor;
return self.getLoggedUser().then(function(user) {
userColor = user.getSimpleColor();
return self.getConfigurationParam(ConfigurationType.SIMPLE_COLOR_VAL);
}).then(function(systemSimpleColor) {
var color = userColor;
if (userColor === null || userColor === undefined || userColor === "") {
color = systemSimpleColor;
}
color = parseInt(color, 16);
/* jslint bitwise: true */
color = (color & 0xFFFFFF);
return color;
});
};
ServerConnector.getMaxOverlayColorInt = function() {
var self = this;
var userColor;
return self.getLoggedUser().then(function(user) {
userColor = user.getMaxColor();
return self.getConfigurationParam(ConfigurationType.MAX_COLOR_VAL);
}).then(function(systemMaxColor) {
var color = userColor;
if (userColor === null || userColor === undefined || userColor === "") {
color = systemMaxColor;
}
color = parseInt(color, 16);
/* jslint bitwise: true */
color = (color & 0xFFFFFF);
return color;
});
};
ServerConnector.readFile = function(url, description) {
var self = this;
if (self.getSessionData().getToken() === undefined) {
self.getSessionData().setLogin(undefined);
window.location.reload(false);
}
if (description === undefined) {
description = url;
}
var content;
return self.callListeners("onDataLoadStart", description).then(function() {
return self._readFile(url);
}).then(function(result) {
content = result;
return self.callListeners("onDataLoadStop", description);
}, function(error) {
return self.callListeners("onDataLoadStop", description).then(function() {
return Promise.reject(error);
});
}).then(function() {
return content;
});
};
ServerConnector._readFile = function(url) {
return new Promise(function(resolve, reject) {
request.get(url, function(error, response, body) {
if (error) {
reject(error);
} else if (response.statusCode !== 200) {
reject(new NetworkError(url + " rejected with status code: " + response.statusCode, {
content : body,
url : url,
statusCode : response.statusCode
}));
} else {
resolve(body);
}
});
});
};
ServerConnector.sendPostRequest = function(url, params) {
var self = this;
if (self.getSessionData().getToken() === undefined) {
self.getSessionData().setLogin(undefined);
window.location.reload(false);
}
return new Promise(function(resolve, reject) {
request.post({
url : url,
form : params
}, function(error, response, body) {
if (error) {
reject(new NetworkError(error, {
content : body,
url : url
}));
} else if (response.statusCode !== 200) {
reject(new NetworkError(url + " rejected with status code: " + response.statusCode, {
content : body,
url : url,
statusCode : response.statusCode
}));
} else {
resolve(body);
}
});
});
};
ServerConnector.sendPutRequest = function(url, params) {
var self = this;
if (self.getSessionData().getToken() === undefined) {
self.getSessionData().setLogin(undefined);
window.location.reload(false);
}
return new Promise(function(resolve, reject) {
request.put({
url : url,
form : params
}, function(error, response, body) {
if (error) {
reject(error);
} else if (response.statusCode !== 200) {
reject(new Error(url + " rejected with status code: " + response.statusCode));
} else {
resolve(body);
}
});
});
};
ServerConnector.sendDeleteRequest = function(url, params) {
var self = this;
if (self.getSessionData().getToken() === undefined) {
self.getSessionData().setLogin(undefined);
window.location.reload(false);
}
return new Promise(function(resolve, reject) {
request({
method : "DELETE",
url : url,
json : params,
}, function(error, response, body) {
if (error) {
reject(error);
} else if (response.statusCode !== 200) {
reject(new Error(url + " rejected with status code: " + response.statusCode));
} else {
resolve(body);
}
});
});
};
ServerConnector.sendPatchRequest = function(url, params) {
var self = this;
if (self.getSessionData().getToken() === undefined) {
self.getSessionData().setLogin(undefined);
window.location.reload(false);
}
return new Promise(function(resolve, reject) {
request({
method : "PATCH",
url : url,
json : params,
}, function(error, response, body) {
if (error) {
reject(error);
} else if (response.statusCode !== 200) {
reject(new Error(url + " rejected with status code: " + response.statusCode));
} else {
resolve(body);
}
});
});
};
ServerConnector.getToken = function(token) {
if (token !== undefined) {
return Promise.resolve(token);
}
var self = this;
token = self.getSessionData(null).getToken();
if (token === undefined) {
return self.login();
} else {
// if the project is not initialized then check if we can download data
// using current token
if (self.getSessionData().getProject() === null) {
return self.getConfiguration({
token : token
}).then(function() {
return token;
}, function() {
return self.login();
});
} else {
return Promise.resolve(token);
}
}
};
ServerConnector.getApiBaseUrl = function() {
return this.getServerBaseUrl() + "/api/";
};
ServerConnector.getServerBaseUrl = function() {
if (this._serverBaseUrl === undefined) {
var url = "" + window.location.href;
if (!url.endsWith("/")) {
url = url.substr(0, url.lastIndexOf("/") + 1);
}
this._serverBaseUrl = url;
}
return this._serverBaseUrl;
};
ServerConnector.createGetParams = function(params, prefix) {
var sorted = [], key;
for (key in params) {
if (params.hasOwnProperty(key)) {
sorted.push(key);
}
}
sorted.sort();
var result = "";
for (var i = 0; i < sorted.length; i++) {
key = sorted[i];
var value = params[key];
if (prefix !== undefined) {
key = prefix + "." + key;
}
if (value instanceof google.maps.Point) {
value = this.pointToString(value);
} else if (Object.prototype.toString.call(value) === '[object Array]') {
value = this.idsToString(value);
} else if (typeof value === 'string' || value instanceof String || !isNaN(value)) {
} else {
result += this.createGetParams(value, key);
value = undefined;
}
if (value !== undefined && value !== "") {
result += key + "=" + value + "&";
}
}
return result;
};
ServerConnector.getApiUrl = function(paramObj) {
var type = paramObj.type;
var method = paramObj.method;
var params = this.createGetParams(paramObj.params);
var result = paramObj.url;
if (result === undefined) {
result = this.getApiBaseUrl() + "/" + type;
}
if (method !== undefined) {
result += "/" + method;
}
if (params !== "") {
result += "?" + params;
}
return result;
};
ServerConnector.getProjectsUrl = function(queryParams, filterParams) {
return this.getApiUrl({
type : "projects/" + queryParams.projectId + "/",
params : filterParams,
});
};
ServerConnector.getProjectStatisticsUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getProjectsUrl(queryParams) + "statistics/",
params : filterParams,
});
};
ServerConnector.getPublicationsUrl = function(queryParams, filterParams) {
filterParams.start = filterParams.start || 0;
filterParams.length = filterParams.length || 10;
return this.getApiUrl({
url : this.getModelsUrl(queryParams) + "publications/",
params : filterParams,
});
};
ServerConnector.getReferenceGenomeUrl = function(queryParams, filterParams) {
var version = this.getIdOrAsterisk(queryParams.version);
return this.getApiUrl({
type : "genomics/taxonomies/" + queryParams.organism + "/genomeTypes/" + queryParams.type + "/versions/" + version
+ "/",
params : filterParams
});
};
ServerConnector.loginUrl = function() {
return this.getApiUrl({
type : "/doLogin",
});
};
ServerConnector.getSuggestedQueryListUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getBioEntitiesUrl(queryParams) + "suggestedQueryList/",
params : filterParams,
});
};
ServerConnector.addCommentUrl = function(queryParams) {
return this.getApiUrl({
url : this.getCommentsUrl(queryParams)
});
};
ServerConnector.addOverlayUrl = function(queryParams) {
return this.getApiUrl({
url : this.getOverlaysUrl(queryParams)
});
};
ServerConnector.updateOverlayUrl = function(queryParams) {
return this.getApiUrl({
url : this.getOverlayByIdUrl(queryParams)
});
};
ServerConnector.deleteOverlayUrl = function(queryParams) {
return this.getApiUrl({
url : this.getOverlayByIdUrl(queryParams),
});
};
ServerConnector.getOverlaysUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getProjectsUrl(queryParams) + "overlays/",
params : filterParams,
});
};
ServerConnector.getCommentsUrl = function(queryParams, filterParams) {
var modelId = this.getIdOrAsterisk(queryParams.modelId);
var url = this.getProjectsUrl(queryParams) + "comments/models/" + modelId + "/";
if (queryParams.elementType !== undefined) {
if (queryParams.elementType === "ALIAS") {
url += "bioEntities/elements/" + queryParams.elementId;
} else if (queryParams.elementType === "REACTION") {
url += "bioEntities/reactions/" + queryParams.elementId;
} else if (queryParams.elementType === "POINT") {
url += "points/" + queryParams.coordinates;
} else {
throw new Error("Unknown element type: " + queryParams.elementType);
}
}
return this.getApiUrl({
url : url,
params : filterParams,
});
};
ServerConnector.getOverlayByIdUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getOverlaysUrl(queryParams) + queryParams.overlayId + "/",
params : filterParams,
});
};
ServerConnector.getOverlayElementsUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getModelsUrl(queryParams) + "bioEntities/",
params : filterParams,
});
};
ServerConnector.getFullOverlayElementUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getAliasesUrl(queryParams) + queryParams.id + "/",
params : filterParams,
});
};
ServerConnector.idsToString = function(ids) {
var result = "";
if (ids !== undefined) {
ids.sort(function(a, b) {
return a - b;
});
for (var i = 0; i < ids.length; i++) {
if (result !== "") {
if (ids[i - 1] !== ids[i]) {
result = result + "," + ids[i];
} // we ignore duplicates
} else {
result = ids[i];
}
}
}
return result;
};
ServerConnector.pointToString = function(point) {
return point.x.toFixed(2) + "," + point.y.toFixed(2);
};
ServerConnector.columnsToString = function(columns) {
if (columns === undefined) {
return "";
}
return columns;
};
ServerConnector.getModelsUrl = function(queryParams) {
var modelId = this.getIdOrAsterisk(queryParams.modelId);
var overlayId = queryParams.overlayId;
var url = this.getProjectsUrl(queryParams);
if (overlayId !== undefined) {
url = this.getOverlayByIdUrl(queryParams);
}
return this.getApiUrl({
url : url + "models/" + modelId + "/",
});
};
ServerConnector.getBioEntitiesUrl = function(queryParams) {
return this.getApiUrl({
url : this.getModelsUrl(queryParams) + "bioEntities/",
});
};
ServerConnector.getIdOrAsterisk = function(id) {
if (id === undefined || id === "" || id === null) {
return "*";
} else {
return id;
}
};
ServerConnector.getReactionsUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getBioEntitiesUrl(queryParams) + "reactions/",
params : filterParams,
});
};
ServerConnector.getAliasesUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getBioEntitiesUrl(queryParams) + "elements/",
params : filterParams,
});
};
ServerConnector.getConfigurationUrl = function(queryParams, filterParams) {
var result = this.getApiUrl({
type : "configuration/",
params : filterParams
});
return result;
};
ServerConnector.getSearchUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getModelsUrl(queryParams) + "bioEntities:search",
params : filterParams,
});
};
ServerConnector.getSearchDrugsUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getProjectsUrl(queryParams) + "drugs:search",
params : filterParams,
});
};
ServerConnector.getSearchMiRnasUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getProjectsUrl(queryParams) + "miRnas:search",
params : filterParams,
});
};
ServerConnector.getSearchChemicalsUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getProjectsUrl(queryParams) + "chemicals:search",
params : filterParams,
});
};
ServerConnector.getOverlaySourceUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getOverlaysUrl(queryParams) + queryParams.overlayId + ":downloadSource",
params : filterParams
});
};
ServerConnector.getImageUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getProjectsUrl(queryParams) + "models/" + queryParams.modelId + ":downloadImage",
params : filterParams,
});
};
ServerConnector.getModelPartUrl = function(queryParams, filterParams) {
return this.getApiUrl({
url : this.getProjectsUrl(queryParams) + "models/" + queryParams.modelId + ":downloadModel",
params : filterParams,
});
};
ServerConnector.getProjectSourceUrl = function(queryParams, filterParams) {
return this.getApiUrl({
type : "projects/" + queryParams.projectId + ":downloadSource",
params : filterParams
});
};
ServerConnector.getUserUrl = function(queryParams, filterParams) {
return this.getApiUrl({
type : "users/",
method : queryParams.login,
params : filterParams,
});
};
ServerConnector.getConfiguration = function(params) {
if (params === undefined) {
params = {};
}
var self = this;
if (this._configuration === undefined) {
return self.readFile(self.getConfigurationUrl()).then(function(content) {
self._configuration = new Configuration(JSON.parse(content));
return Promise.resolve(self._configuration);
});
} else {
return Promise.resolve(self._configuration);
}
};
ServerConnector.getConfigurationParam = function(paramId) {
var self = this;
return self.getConfiguration().then(function(configuration) {
return configuration.getOption(paramId);
});
};
ServerConnector.getProject = function(projectId) {
var queryParams = {};
var filterParams = {};
var project;
var self = this;
return self.getProjectId(projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getProjectsUrl(queryParams, filterParams));
}).then(function(content) {
project = new Project(content);
return self.getOverlays(projectId);
}).then(function(overlays) {
project.getModel().addLayouts(overlays);
return project;
}).then(null, function(error) {
if ((error instanceof NetworkError)) {
switch (error.statusCode) {
case HttpStatus.NOT_FOUND:
return null;
case HttpStatus.FORBIDDEN:
return Promise.reject(new SecurityError("Access denied."));
default:
return Promise.reject(error);
}
} else {
return Promise.reject(error);
}
});
};
ServerConnector.getProjectStatistics = function(projectId) {
var queryParams = {};
var filterParams = {};
var self = this;
var content;
return self.getProjectId(projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getProjectStatisticsUrl(queryParams, filterParams));
}).then(function(result) {
content = JSON.parse(result);
return self.getConfiguration();
}).then(function(configuration) {
return new ProjectStatistics(content, configuration);
});
};
ServerConnector.getLoggedUser = function() {
var self = this;
if (self._loggedUser !== undefined) {
return Promise.resolve(self._loggedUser);
} else {
return self.getUser(self.getSessionData().getLogin()).then(function(user) {
self._loggedUser = user;
return self._loggedUser;
});
}
};
ServerConnector.getUser = function(login) {
var self = this;
var queryParams = {
login : login,
};
var filterParams = {};
return self.readFile(self.getUserUrl(queryParams, filterParams)).then(function(content) {
var obj = JSON.parse(content);
return new User(obj);
});
};
ServerConnector.getOverlays = function(projectId) {
var self = this;
var queryParams = {};
var filterParams = {};
return new Promise(function(resolve, reject) {
self.getProjectId(projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getOverlaysUrl(queryParams, filterParams));
}).then(function(content) {
var arr = JSON.parse(content);
var result = [];
for (var i = 0; i < arr.length; i++) {
var overlay = new LayoutData(arr[i]);
result.push(overlay);
}
resolve(result);
}, reject);
});
};
ServerConnector.getOverlayElements = function(overlayId, projectId) {
var self = this;
if (overlayId === undefined) {
throw new Error("Layout id must be defined");
}
var queryParams = {
overlayId : overlayId,
modelId : "*",
};
var filterParams = {};
return self.getProjectId(projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getOverlayElementsUrl(queryParams, filterParams));
}).then(function(content) {
var arr = JSON.parse(content);
var result = [];
for (var i = 0; i < arr.length; i++) {
var element = arr[i];
if (element.type === "REACTION") {
result.push(new LayoutReaction(element.overlayContent));
} else if (element.type === "ALIAS") {
result.push(new LayoutAlias(element.overlayContent));
} else {
throw new Error("Unknown element type: " + element.type);
}
}
return result;
});
};
ServerConnector.getFullOverlayElement = function(params) {
var self = this;
var queryParams = {
overlayId : params.overlay.getId(),
modelId : params.element.getModelId(),
id : params.element.getId(),
};
var filterParams = {};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getFullOverlayElementUrl(queryParams, filterParams));
}).then(function(content) {
var element = JSON.parse(content);
var result = null;
if (element.type === "REACTION") {
result = new LayoutReaction(element.overlayContent);
} else if (element.type === "ALIAS") {
result = new LayoutAlias(element.overlayContent);
} else {
throw new Error("Unknown element type: " + element.type);
}
return result;
});
};
ServerConnector.getProjectId = function(projectId) {
var self = this;
if (projectId !== undefined && projectId !== null && projectId !== "") {
return Promise.resolve(projectId);
} else if (GuiConnector.getParams['id'] !== undefined) {
return Promise.resolve(GuiConnector.getParams['id']);
} else {
return self.getConfigurationParam(ConfigurationType.DEFAULT_MAP);
}
};
ServerConnector.getLogoImg = function() {
return this.getConfigurationParam(ConfigurationType.LOGO_IMG);
};
ServerConnector.getLogoLink = function() {
return this.getConfigurationParam(ConfigurationType.LOGO_LINK);
};
ServerConnector.getMaxSearchDistance = function() {
return this.getConfigurationParam(ConfigurationType.SEARCH_DISTANCE);
};
ServerConnector.getOverlayById = function(overlayId, projectId) {
var self = this;
var queryParams = {
overlayId : overlayId
};
var filterParams = {};
return self.getProjectId(projectId).then(function(data) {
queryParams.projectId = data;
return self.readFile(self.getOverlayByIdUrl(queryParams, filterParams));
}).then(function(content) {
return new LayoutData(JSON.parse(content));
});
};
ServerConnector.getReactions = function(params) {
var self = this;
var queryParams = {};
var filterParams = {
id : params.ids,
columns : params.columns,
participantId : params.participantId,
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getReactionsUrl(queryParams, filterParams));
}).then(function(content) {
var array = JSON.parse(content);
var result = [];
for (var i = 0; i < array.length; i++) {
result.push(new Reaction(array[i]));
}
return result;
});
};
ServerConnector.getAliases = function(params) {
var self = this;
var queryParams = {
modelId : params.modelId,
};
if (params.ids === undefined) {
params.ids = [];
}
if (params.includedCompartmentIds === undefined) {
params.includedCompartmentIds = [];
}
if (params.excludedCompartmentIds === undefined) {
params.excludedCompartmentIds = [];
}
var filterParams = {
id : params.ids,
columns : params.columns,
type : params.type,
excludedCompartmentIds : params.excludedCompartmentIds,
includedCompartmentIds : params.includedCompartmentIds,
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
if (filterParams.id.length > 100) {
return self.sendPostRequest(self.getAliasesUrl(queryParams), filterParams);
} else {
return self.readFile(self.getAliasesUrl(queryParams, filterParams));
}
}).then(function(content) {
var array = JSON.parse(content);
var result = [];
for (var i = 0; i < array.length; i++) {
result.push(new Alias(array[i]));
}
return result;
});
};
ServerConnector.getLightComments = function(params) {
params.columns = [ "id", "elementId", "modelId", "type", "icon", "removed", "pinned" ];
return this.getComments(params);
};
ServerConnector.getComments = function(params) {
var self = this;
var queryParams = {
elementId : params.elementId,
elementType : params.elementType,
coordinates : params.coordinates,
};
var filterParams = {
columns : params.columns
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getCommentsUrl(queryParams, filterParams));
}).then(function(content) {
var array = JSON.parse(content);
var result = [];
for (var i = 0; i < array.length; i++) {
result.push(new Comment(array[i]));
}
return result;
});
};
ServerConnector.getSessionData = function(project) {
if (this._sessionData === undefined) {
this._sessionData = new SessionData(project);
}
if (project !== undefined && this._sessionData.getProject() === null) {
this._sessionData.setProject(project);
}
return this._sessionData;
};
ServerConnector.getClosestElementsByCoordinates = function(params) {
var self = this;
var queryParams = {
modelId : params.modelId
};
var filterParams = {
coordinates : params.coordinates,
count : params.count,
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getSearchUrl(queryParams, filterParams));
}).then(function(content) {
var array = JSON.parse(content);
var result = [];
for (var i = 0; i < array.length; i++) {
result.push(new IdentifiedElement(array[i]));
}
return result;
});
};
ServerConnector.login = function(login, password) {
var self = this;
var params = {};
if (login !== undefined) {
params.login = login;
params.password = password;
} else {
params.login = "anonymous";
}
self.getSessionData().setToken("");
return self.sendPostRequest(self.loginUrl(), params).then(function() {
self.getSessionData().setLogin(params.login);
return Promise.resolve(self.getSessionData().getToken());
}, function(error) {
if (error instanceof NetworkError && error.statusCode === HttpStatus.FORBIDDEN) {
throw new InvalidCredentialsError("Invalid credentials");
} else {
throw error;
}
});
};
ServerConnector.logout = function() {
var self = this;
self.getSessionData().setToken(undefined);
self.getSessionData().setLogin(undefined);
return Promise.resolve();
};
ServerConnector.getElementsByQuery = function(params) {
var self = this;
var queryParams = {
modelId : params.modelId
};
var filterParams = {
query : params.query,
perfectMatch : params.perfectMatch,
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getSearchUrl(queryParams, filterParams));
}).then(function(content) {
var array = JSON.parse(content);
var result = [];
for (var i = 0; i < array.length; i++) {
result.push(new IdentifiedElement(array[i]));
}
return result;
});
};
ServerConnector.getDrugsByQuery = function(params) {
var self = this;
var queryParams = {};
var filterParams = {
query : params.query
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getSearchDrugsUrl(queryParams, filterParams));
}).then(function(content) {
var array = JSON.parse(content);
var result = [];
for (var i = 0; i < array.length; i++) {
result.push(new Drug(array[i]));
}
return result;
});
};
ServerConnector.getMiRnasByQuery = function(params) {
var self = this;
var queryParams = {};
var filterParams = {
query : params.query
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getSearchMiRnasUrl(queryParams, filterParams));
}).then(function(content) {
var array = JSON.parse(content);
var result = [];
for (var i = 0; i < array.length; i++) {
result.push(new MiRna(array[i]));
}
return result;
});
};
ServerConnector.getChemicalsByQuery = function(params) {
var self = this;
var queryParams = {};
var filterParams = {
query : params.query
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getSearchChemicalsUrl(queryParams, filterParams));
}).then(function(content) {
var array = JSON.parse(content);
var result = [];
for (var i = 0; i < array.length; i++) {
result.push(new Chemical(array[i]));
}
return result;
});
};
ServerConnector.getOverlaySourceDownloadUrl = function(params) {
var self = this;
var queryParams = {
overlayId : params.overlayId
};
var filterParams = {};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.getOverlaySourceUrl(queryParams, filterParams);
});
};
ServerConnector.getImageDownloadUrl = function(params) {
var self = this;
var queryParams = {
projectId : params.projectId,
modelId : params.modelId,
};
var filterParams = {
token : params.token,
polygonString : params.polygonString,
handlerClass : params.handlerClass,
backgroundOverlayId : params.backgroundOverlayId,
zoomLevel : params.zoomLevel,
overlayIds : this.idsToString(params.overlayIds),
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.getImageUrl(queryParams, filterParams);
});
};
ServerConnector.getModelDownloadUrl = function(params) {
var self = this;
var queryParams = {
projectId : params.projectId,
modelId : params.modelId,
};
var filterParams = {
token : params.token,
polygonString : params.polygonString,
handlerClass : params.handlerClass,
backgroundOverlayId : params.backgroundOverlayId,
zoomLevel : params.zoomLevel,
overlayIds : this.idsToString(params.overlayIds),
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.getModelPartUrl(queryParams, filterParams);
});
};
ServerConnector.getImageConverters = function() {
var self = this;
return self.getConfiguration().then(function(configuration) {
return configuration.getImageConverters();
});
};
ServerConnector.getModelConverters = function() {
var self = this;
return self.getConfiguration().then(function(configuration) {
return configuration.getModelConverters();
});
};
ServerConnector.getProjectSourceDownloadUrl = function(params) {
if (params === undefined) {
params = {};
}
var queryParams = {};
var filterParams = {};
var self = this;
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.getProjectSourceUrl(queryParams, filterParams);
});
};
ServerConnector.getDrugNamesByTarget = function(params) {
var self = this;
var queryParams = {};
var filterParams = {
columns : [ "name" ],
target : params.target.getType() + ":" + params.target.getId()
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getSearchDrugsUrl(queryParams, filterParams));
}).then(function(content) {
var result = [];
var object = JSON.parse(content);
for (var i = 0; i < object.length; i++) {
result.push(object[i].name);
}
return result;
});
};
ServerConnector.getMiRnaNamesByTarget = function(params) {
var self = this;
var queryParams = {};
var filterParams = {
columns : [ "name" ],
target : params.target.getType() + ":" + params.target.getId()
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getSearchMiRnasUrl(queryParams, filterParams));
}).then(function(content) {
var result = [];
var object = JSON.parse(content);
for (var i = 0; i < object.length; i++) {
result.push(object[i].name);
}
return result;
});
};
ServerConnector.getChemicalNamesByTarget = function(params) {
var self = this;
var queryParams = {};
var filterParams = {
columns : [ "name" ],
target : params.target.getType() + ":" + params.target.getId()
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getSearchChemicalsUrl(queryParams, filterParams));
}).then(function(content) {
var result = [];
var object = JSON.parse(content);
for (var i = 0; i < object.length; i++) {
result.push(object[i].name);
}
return result;
});
};
ServerConnector.addComment = function(params) {
var self = this;
var queryParams = {
elementId : params.elementId,
elementType : params.elementType,
coordinates : self.pointToString(params.coordinates),
modelId : params.modelId,
};
var filterParams = params;
delete filterParams.elementId;
delete filterParams.elementType;
if (queryParams.elementType === "POINT") {
delete filterParams.coordinates;
} else {
filterParams.coordinates = self.pointToString(params.coordinates);
}
delete filterParams.modelId;
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.sendPostRequest(self.addCommentUrl(queryParams), filterParams);
}).then(function(content) {
var response = JSON.parse(content);
return new Comment(response);
});
};
ServerConnector.addOverlay = function(params) {
var self = this;
var queryParams = {};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.sendPostRequest(self.addOverlayUrl(queryParams), params);
}).then(function(content) {
return new LayoutData(JSON.parse(content));
});
};
ServerConnector.updateOverlay = function(params) {
var self = this;
var queryParams = {
overlayId : params.overlayId
};
var filterParams = {
overlay : {}
};
if (params.name !== undefined) {
filterParams.overlay.name = params.name;
}
if (params.description !== undefined) {
filterParams.overlay.description = params.description;
}
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.sendPatchRequest(self.updateOverlayUrl(queryParams), filterParams);
});
};
ServerConnector.removeOverlay = function(params) {
var self = this;
var queryParams = {
overlayId : params.overlayId
};
var filterParams = {};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.sendDeleteRequest(self.deleteOverlayUrl(queryParams), filterParams);
});
};
ServerConnector.getSuggestedQueryList = function(projectId) {
var self = this;
return self.getProjectId(projectId).then(function(result) {
projectId = result;
return self.readFile(self.getSuggestedQueryListUrl({
projectId : projectId
}));
}).then(function(content) {
return JSON.parse(content);
});
};
ServerConnector.getOverlayTypes = function() {
var self = this;
return self.getConfiguration().then(function(configuration) {
return configuration.getOverlayTypes();
});
};
ServerConnector.getPublications = function(params) {
var self = this;
if (params === undefined) {
params = {};
}
var queryParams = {};
var filterParams = {
start : params.start,
length : params.length,
sortColumn : params.sortColumn,
sortOrder : params.sortOrder,
search : params.search,
};
return self.getProjectId(params.projectId).then(function(result) {
queryParams.projectId = result;
return self.readFile(self.getPublicationsUrl(queryParams, filterParams));
}).then(function(content) {
return JSON.parse(content);
});
};
ServerConnector.getReferenceGenome = function(params) {
var self = this;
var filterParams = {};
return self.readFile(self.getReferenceGenomeUrl(params, filterParams)).then(function(content) {
return new ReferenceGenome(JSON.parse(content));
});
};
module.exports = ServerConnector;