From f9caf97b0c94b829ba1535c6ccbc82b1f8ae798d Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 25 Aug 2017 17:02:13 +0200 Subject: [PATCH] removing projects from frontend --- frontend-js/src/main/js/ServerConnector.js | 745 +++++++++--------- .../src/main/js/gui/admin/MapsAdminPanel.js | 430 +++++----- .../src/test/js/ServerConnector-test.js | 11 + .../sample/DELETE_token=MOCK_TOKEN_ID& | 1 + .../api/projects/ProjectController.java | 9 + .../api/projects/ProjectRestImpl.java | 7 + .../services/impl/ProjectServiceTest.java | 3 +- .../java/lcsb/mapviewer/bean/ProjectBean.java | 5 +- 8 files changed, 639 insertions(+), 572 deletions(-) create mode 100644 frontend-js/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID& diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index 530faf20ef..d96f861c4c 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -41,7 +41,7 @@ var ObjectWithListeners = require('./ObjectWithListeners'); * This object contains methods that will communicate with server. */ var ServerConnector = new ObjectWithListeners(); -ServerConnector.init = function() { +ServerConnector.init = function () { var self = this; self._configurationParam = []; @@ -73,16 +73,16 @@ ServerConnector.registerListenerType("onDataLoadStart"); ServerConnector.registerListenerType("onDataLoadStop"); ServerConnector.init(); -ServerConnector.getMinOverlayColorInt = function() { +ServerConnector.getMinOverlayColorInt = function () { var self = this; - return self.getLoggedUser().then(function(user) { + return self.getLoggedUser().then(function (user) { var userColor = user.getMinColor(); return self.returnUserOrSystemColor(userColor, self.getConfigurationParam(ConfigurationType.MIN_COLOR_VAL)); }); }; -ServerConnector.returnUserOrSystemColor = function(userColor, systemPromisedColor) { - return systemPromisedColor.then(function(systemColor) { +ServerConnector.returnUserOrSystemColor = function (userColor, systemPromisedColor) { + return systemPromisedColor.then(function (systemColor) { var color = userColor; if (userColor === null || userColor === undefined || userColor === "") { color = systemColor; @@ -94,31 +94,31 @@ ServerConnector.returnUserOrSystemColor = function(userColor, systemPromisedColo }); }; -ServerConnector.getSimpleOverlayColorInt = function() { +ServerConnector.getSimpleOverlayColorInt = function () { var self = this; - return self.getLoggedUser().then(function(user) { + return self.getLoggedUser().then(function (user) { var userColor = user.getSimpleColor(); return self.returnUserOrSystemColor(userColor, self.getConfigurationParam(ConfigurationType.SIMPLE_COLOR_VAL)); }); }; -ServerConnector.getMaxOverlayColorInt = function() { +ServerConnector.getMaxOverlayColorInt = function () { var self = this; - return self.getLoggedUser().then(function(user) { + return self.getLoggedUser().then(function (user) { var userColor = user.getMaxColor(); return self.returnUserOrSystemColor(userColor, self.getConfigurationParam(ConfigurationType.MAX_COLOR_VAL)); }); }; -ServerConnector.sendGetRequest = function(url, description) { +ServerConnector.sendGetRequest = function (url, description) { return this.sendRequest({ - url : url, - description : description, - method : "GET" + url: url, + description: description, + method: "GET" }); }; -ServerConnector.sendRequest = function(params) { +ServerConnector.sendRequest = function (params) { var self = this; if (arguments.length > 1) { return Promise.reject(new Error("Only two arguments are supported")); @@ -136,31 +136,31 @@ ServerConnector.sendRequest = function(params) { } var content; - return self.callListeners("onDataLoadStart", description).then(function() { + return self.callListeners("onDataLoadStart", description).then(function () { return self._sendRequest(params); - }).then(function(result) { + }).then(function (result) { content = result; return self.callListeners("onDataLoadStop", description); - }, function(error) { - return self.callListeners("onDataLoadStop", description).then(function() { + }, function (error) { + return self.callListeners("onDataLoadStop", description).then(function () { return Promise.reject(error); }); - }).then(function() { + }).then(function () { return content; }); }; -ServerConnector._sendRequest = function(params) { - return new Promise(function(resolve, reject) { - request(params, function(error, response, body) { +ServerConnector._sendRequest = function (params) { + return new Promise(function (resolve, reject) { + request(params, function (error, response, body) { if (error) { reject(error); } else if (response.statusCode !== 200) { reject(new NetworkError(params.url + " rejected with status code: " + response.statusCode, { - content : body, - url : params.url, - statusCode : response.statusCode + content: body, + url: params.url, + statusCode: response.statusCode })); } else { // for some reason sometimes result is an object not a string @@ -174,31 +174,31 @@ ServerConnector._sendRequest = function(params) { }); }; -ServerConnector.sendPostRequest = function(url, params) { +ServerConnector.sendPostRequest = function (url, params) { return this.sendRequest({ - method : "POST", - url : url, - form : params + method: "POST", + url: url, + form: params }); }; -ServerConnector.sendDeleteRequest = function(url, json) { +ServerConnector.sendDeleteRequest = function (url, json) { return this.sendRequest({ - method : "DELETE", - url : url, - json : json, + method: "DELETE", + url: url, + json: json, }); }; -ServerConnector.sendPatchRequest = function(url, json) { +ServerConnector.sendPatchRequest = function (url, json) { return this.sendRequest({ - method : "PATCH", - url : url, - json : json, + method: "PATCH", + url: url, + json: json, }); }; -ServerConnector.getToken = function() { +ServerConnector.getToken = function () { var self = this; var token = self.getSessionData(null).getToken(); @@ -208,11 +208,11 @@ ServerConnector.getToken = function() { // if the project is not initialized then check if we can download data // using current token if (self.getSessionData().getProject() === null) { - return self.getConfiguration().then(function() { + return self.getConfiguration().then(function () { return token; // if there was an error accessing configuration it means our token is // invalid - }, function() { + }, function () { return self.login(); }); } else { @@ -221,11 +221,11 @@ ServerConnector.getToken = function() { } }; -ServerConnector.getApiBaseUrl = function() { +ServerConnector.getApiBaseUrl = function () { return this.getServerBaseUrl() + "/api/"; }; -ServerConnector.getServerBaseUrl = function() { +ServerConnector.getServerBaseUrl = function () { if (this._serverBaseUrl === undefined) { var url = "" + window.location.href; if (url.indexOf("?")>=0) { @@ -239,7 +239,7 @@ ServerConnector.getServerBaseUrl = function() { return this._serverBaseUrl; }; -ServerConnector.createGetParams = function(params, prefix) { +ServerConnector.createGetParams = function (params, prefix) { var sorted = [], key; for (key in params) { @@ -275,7 +275,7 @@ ServerConnector.createGetParams = function(params, prefix) { return result; }; -ServerConnector.getApiUrl = function(paramObj) { +ServerConnector.getApiUrl = function (paramObj) { var type = paramObj.type; var params = this.createGetParams(paramObj.params); @@ -289,51 +289,51 @@ ServerConnector.getApiUrl = function(paramObj) { return result; }; -ServerConnector.getProjectsUrl = function(queryParams, filterParams) { +ServerConnector.getProjectsUrl = function (queryParams, filterParams) { return this.getApiUrl({ - type : "projects/", - params : filterParams, + type: "projects/", + params: filterParams, }); }; -ServerConnector.getProjectUrl = function(queryParams, filterParams) { +ServerConnector.getProjectUrl = function (queryParams, filterParams) { var id = this.getIdOrAsterisk(queryParams.projectId); return this.getApiUrl({ - url : this.getProjectsUrl(queryParams) + id + "/", - params : filterParams, + url: this.getProjectsUrl(queryParams) + id + "/", + params: filterParams, }); }; -ServerConnector.getProjectStatisticsUrl = function(queryParams, filterParams) { +ServerConnector.getProjectStatisticsUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getProjectUrl(queryParams) + "statistics/", - params : filterParams, + url: this.getProjectUrl(queryParams) + "statistics/", + params: filterParams, }); }; -ServerConnector.getPublicationsUrl = function(queryParams, 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, + url: this.getModelsUrl(queryParams) + "publications/", + params: filterParams, }); }; -ServerConnector.getReferenceGenomeUrl = function(queryParams, 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 + type: "genomics/taxonomies/" + queryParams.organism + "/genomeTypes/" + queryParams.type + "/versions/" + version + + "/", + params: filterParams }); }; -ServerConnector.loginUrl = function() { +ServerConnector.loginUrl = function () { return this.getApiUrl({ - type : "/doLogin", + type: "/doLogin", }); }; @@ -345,49 +345,49 @@ ServerConnector.logoutUrl = function () { ServerConnector.getSuggestedQueryListUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getBioEntitiesUrl(queryParams) + "suggestedQueryList/", - params : filterParams, + url: this.getBioEntitiesUrl(queryParams) + "suggestedQueryList/", + params: filterParams, }); }; -ServerConnector.addCommentUrl = function(queryParams) { +ServerConnector.addCommentUrl = function (queryParams) { return this.getApiUrl({ - url : this.getCommentsUrl(queryParams) + url: this.getCommentsUrl(queryParams) }); }; -ServerConnector.addOverlayUrl = function(queryParams) { +ServerConnector.addOverlayUrl = function (queryParams) { return this.getApiUrl({ - url : this.getOverlaysUrl(queryParams) + url: this.getOverlaysUrl(queryParams) }); }; -ServerConnector.updateOverlayUrl = function(queryParams) { +ServerConnector.updateOverlayUrl = function (queryParams) { return this.getApiUrl({ - url : this.getOverlayByIdUrl(queryParams) + url: this.getOverlayByIdUrl(queryParams) }); }; -ServerConnector.deleteOverlayUrl = function(queryParams) { +ServerConnector.deleteOverlayUrl = function (queryParams) { return this.getApiUrl({ - url : this.getOverlayByIdUrl(queryParams), + url: this.getOverlayByIdUrl(queryParams), }); }; -ServerConnector.deleteCommentUrl = function(queryParams) { +ServerConnector.deleteCommentUrl = function (queryParams) { return this.getApiUrl({ - url : this.getProjectUrl(queryParams) + "comments/" + queryParams.commentId + "/", + url: this.getProjectUrl(queryParams) + "comments/" + queryParams.commentId + "/", }); }; -ServerConnector.getOverlaysUrl = function(queryParams, filterParams) { +ServerConnector.getOverlaysUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getProjectUrl(queryParams) + "overlays/", - params : filterParams, + url: this.getProjectUrl(queryParams) + "overlays/", + params: filterParams, }); }; -ServerConnector.getCommentsUrl = function(queryParams, filterParams) { +ServerConnector.getCommentsUrl = function (queryParams, filterParams) { var modelId = this.getIdOrAsterisk(queryParams.modelId); var url = this.getProjectUrl(queryParams) + "comments/models/" + modelId + "/"; if (queryParams.elementType !== undefined) { @@ -402,41 +402,41 @@ ServerConnector.getCommentsUrl = function(queryParams, filterParams) { } } return this.getApiUrl({ - url : url, - params : filterParams, + url: url, + params: filterParams, }); }; -ServerConnector.getOverlayByIdUrl = function(queryParams, filterParams) { +ServerConnector.getOverlayByIdUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getOverlaysUrl(queryParams) + queryParams.overlayId + "/", - params : filterParams, + url: this.getOverlaysUrl(queryParams) + queryParams.overlayId + "/", + params: filterParams, }); }; -ServerConnector.getOverlayElementsUrl = function(queryParams, filterParams) { +ServerConnector.getOverlayElementsUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getModelsUrl(queryParams) + "bioEntities/", - params : filterParams, + url: this.getModelsUrl(queryParams) + "bioEntities/", + params: filterParams, }); }; -ServerConnector.getFullOverlayElementUrl = function(queryParams, filterParams) { +ServerConnector.getFullOverlayElementUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getAliasesUrl(queryParams) + queryParams.id + "/", - params : filterParams, + url: this.getAliasesUrl(queryParams) + queryParams.id + "/", + params: filterParams, }); }; -ServerConnector.idsToString = function(ids) { +ServerConnector.idsToString = function (ids) { var result = ""; if (ids !== undefined) { - ids.sort(function(a, b) { + ids.sort(function (a, b) { return a - b; }); for (var i = 0; i < ids.length; i++) { @@ -452,11 +452,11 @@ ServerConnector.idsToString = function(ids) { return result; }; -ServerConnector.pointToString = function(point) { +ServerConnector.pointToString = function (point) { return point.x.toFixed(2) + "," + point.y.toFixed(2); }; -ServerConnector.getModelsUrl = function(queryParams) { +ServerConnector.getModelsUrl = function (queryParams) { var modelId = this.getIdOrAsterisk(queryParams.modelId); var overlayId = queryParams.overlayId; var url = this.getProjectUrl(queryParams); @@ -465,17 +465,17 @@ ServerConnector.getModelsUrl = function(queryParams) { } return this.getApiUrl({ - url : url + "models/" + modelId + "/", + url: url + "models/" + modelId + "/", }); }; -ServerConnector.getBioEntitiesUrl = function(queryParams) { +ServerConnector.getBioEntitiesUrl = function (queryParams) { return this.getApiUrl({ - url : this.getModelsUrl(queryParams) + "bioEntities/", + url: this.getModelsUrl(queryParams) + "bioEntities/", }); }; -ServerConnector.getIdOrAsterisk = function(id) { +ServerConnector.getIdOrAsterisk = function (id) { if (id === undefined || id === "" || id === null) { return "*"; } else { @@ -483,112 +483,112 @@ ServerConnector.getIdOrAsterisk = function(id) { } }; -ServerConnector.getReactionsUrl = function(queryParams, filterParams) { +ServerConnector.getReactionsUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getBioEntitiesUrl(queryParams) + "reactions/", - params : filterParams, + url: this.getBioEntitiesUrl(queryParams) + "reactions/", + params: filterParams, }); }; -ServerConnector.getAliasesUrl = function(queryParams, filterParams) { +ServerConnector.getAliasesUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getBioEntitiesUrl(queryParams) + "elements/", - params : filterParams, + url: this.getBioEntitiesUrl(queryParams) + "elements/", + params: filterParams, }); }; -ServerConnector.getConfigurationUrl = function(queryParams, filterParams) { +ServerConnector.getConfigurationUrl = function (queryParams, filterParams) { var result = this.getApiUrl({ - type : "configuration/", - params : filterParams + type: "configuration/", + params: filterParams }); return result; }; -ServerConnector.getSearchUrl = function(queryParams, filterParams) { +ServerConnector.getSearchUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getModelsUrl(queryParams) + "bioEntities:search", - params : filterParams, + url: this.getModelsUrl(queryParams) + "bioEntities:search", + params: filterParams, }); }; -ServerConnector.getSearchDrugsUrl = function(queryParams, filterParams) { +ServerConnector.getSearchDrugsUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getProjectUrl(queryParams) + "drugs:search", - params : filterParams, + url: this.getProjectUrl(queryParams) + "drugs:search", + params: filterParams, }); }; -ServerConnector.getSearchMiRnasUrl = function(queryParams, filterParams) { +ServerConnector.getSearchMiRnasUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getProjectUrl(queryParams) + "miRnas:search", - params : filterParams, + url: this.getProjectUrl(queryParams) + "miRnas:search", + params: filterParams, }); }; -ServerConnector.getSearchChemicalsUrl = function(queryParams, filterParams) { +ServerConnector.getSearchChemicalsUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getProjectUrl(queryParams) + "chemicals:search", - params : filterParams, + url: this.getProjectUrl(queryParams) + "chemicals:search", + params: filterParams, }); }; -ServerConnector.getOverlaySourceUrl = function(queryParams, filterParams) { +ServerConnector.getOverlaySourceUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getOverlaysUrl(queryParams) + queryParams.overlayId + ":downloadSource", - params : filterParams + url: this.getOverlaysUrl(queryParams) + queryParams.overlayId + ":downloadSource", + params: filterParams }); }; -ServerConnector.getImageUrl = function(queryParams, filterParams) { +ServerConnector.getImageUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getProjectUrl(queryParams) + "models/" + queryParams.modelId + ":downloadImage", - params : filterParams, + url: this.getProjectUrl(queryParams) + "models/" + queryParams.modelId + ":downloadImage", + params: filterParams, }); }; -ServerConnector.getModelPartUrl = function(queryParams, filterParams) { +ServerConnector.getModelPartUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getProjectUrl(queryParams) + "models/" + queryParams.modelId + ":downloadModel", - params : filterParams, + url: this.getProjectUrl(queryParams) + "models/" + queryParams.modelId + ":downloadModel", + params: filterParams, }); }; -ServerConnector.getProjectSourceUrl = function(queryParams, filterParams) { +ServerConnector.getProjectSourceUrl = function (queryParams, filterParams) { return this.getApiUrl({ - type : "projects/" + queryParams.projectId + ":downloadSource", - params : filterParams + type: "projects/" + queryParams.projectId + ":downloadSource", + params: filterParams }); }; -ServerConnector.getUsersUrl = function(queryParams, filterParams) { +ServerConnector.getUsersUrl = function (queryParams, filterParams) { return this.getApiUrl({ - type : "users/", - params : filterParams + type: "users/", + params: filterParams }); }; -ServerConnector.getUserUrl = function(queryParams, filterParams) { +ServerConnector.getUserUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getUsersUrl() + queryParams.login, - params : filterParams, + url: this.getUsersUrl() + queryParams.login, + params: filterParams, }); }; -ServerConnector.getUpdateUserPrivilegesUrl = function(queryParams, filterParams) { +ServerConnector.getUpdateUserPrivilegesUrl = function (queryParams, filterParams) { return this.getApiUrl({ - url : this.getUserUrl(queryParams) + ":updatePrivileges", - params : filterParams, + url: this.getUserUrl(queryParams) + ":updatePrivileges", + params: filterParams, }); }; -ServerConnector.getConfiguration = function(params) { +ServerConnector.getConfiguration = function (params) { if (params === undefined) { params = {}; } var self = this; if (this._configuration === undefined) { - return self.sendGetRequest(self.getConfigurationUrl()).then(function(content) { + return self.sendGetRequest(self.getConfigurationUrl()).then(function (content) { self._configuration = new Configuration(JSON.parse(content)); return Promise.resolve(self._configuration); }); @@ -602,19 +602,19 @@ ServerConnector.getConfigurationParam = function (paramId) { return Promise.reject(new Error("Unknown param type")); } var self = this; - return self.getConfiguration().then(function(configuration) { + return self.getConfiguration().then(function (configuration) { return configuration.getOption(paramId); }); }; -ServerConnector.getModels = function(projectId) { +ServerConnector.getModels = function (projectId) { var queryParams = {}; var filterParams = {}; var self = this; - return self.getProjectId(projectId).then(function(result) { + return self.getProjectId(projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getModelsUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var models = []; var parsedJson = JSON.parse(content); for (var i = 0; i < parsedJson.length; i++) { @@ -624,15 +624,16 @@ ServerConnector.getModels = function(projectId) { }); }; -ServerConnector.getProject = function(projectId) { +ServerConnector.getProject = function (projectId) { var queryParams = {}; var filterParams = {}; var project; var self = this; - return self.getProjectId(projectId).then(function(result) { + return self.getProjectId(projectId).then(function (result) { + projectId = result; queryParams.projectId = result; return self.sendGetRequest(self.getProjectUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var downloadedProject = new Project(content); if (self._projectsById[projectId] !== undefined) { self._projectsById[projectId].update(downloadedProject); @@ -641,27 +642,27 @@ ServerConnector.getProject = function(projectId) { } project = self._projectsById[projectId]; return self.getModels(projectId); - }).then(function(models) { + }).then(function (models) { project.setModel(models[0]); return self.getLoggedUser(); - }).then(function(user) { + }).then(function (user) { return self.getOverlays({ - projectId : projectId, - creator : user.getLogin(), - publicOverlay : false, + projectId: projectId, + creator: user.getLogin(), + publicOverlay: false, }); - }).then(function(overlays) { + }).then(function (overlays) { project.getModel().addLayouts(overlays); return project; - }).then(null, function(error) { + }).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); + 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); @@ -669,25 +670,53 @@ ServerConnector.getProject = function(projectId) { }); }; -ServerConnector.updateProject = function(project) { +ServerConnector.updateProject = function (project) { var self = this; var queryParams = { - projectId : project.getProjectId() + projectId: project.getProjectId() }; var filterParams = { - project : { - name : project.getName(), - version : project.getVersion(), - notifyEmail : project.getNotifyEmail(), - organism : self.serialize(project.getOrganism()), - disease : self.serialize(project.getDisease()), + project: { + name: project.getName(), + version: project.getVersion(), + notifyEmail: project.getNotifyEmail(), + organism: self.serialize(project.getOrganism()), + disease: self.serialize(project.getDisease()), }, }; - return self.sendPatchRequest(self.getProjectUrl(queryParams), filterParams).then(function(content) { + return self.sendPatchRequest(self.getProjectUrl(queryParams), filterParams).then(function (content) { var downloadedProject = new Project(content); project.update(downloadedProject); return project; - }).then(null, function(error) { + }).then(null, function (error) { + if ((error instanceof NetworkError)) { + switch (error.statusCode) { + case HttpStatus.FORBIDDEN: + return Promise.reject(new SecurityError("Access denied.")); + default: + return Promise.reject(error); + } + } else { + return Promise.reject(error); + } + }); +}; + +ServerConnector.removeProject = function (projectId) { + var self = this; + var queryParams = { + projectId: projectId + }; + return self.sendDeleteRequest(self.getProjectUrl(queryParams)).then(function (content) { + var project = new Project(content); + if (self._projectsById[project.getProjectId()] !== undefined) { + self._projectsById[project.getProjectId()].update(project); + } else { + throw new Error(); + self._projectsById[project.getProjectId()] = project; + } + return self._projectsById[project.getProjectId()]; + }).then(null, function (error) { if ((error instanceof NetworkError)) { switch (error.statusCode) { case HttpStatus.FORBIDDEN: @@ -701,12 +730,12 @@ ServerConnector.updateProject = function(project) { }); }; -ServerConnector.addProject = function(options) { +ServerConnector.addProject = function (options) { var self = this; var queryParams = { - projectId : options.projectId + projectId: options.projectId }; - return self.sendPostRequest(self.getProjectUrl(queryParams), options).then(function(content) { + return self.sendPostRequest(self.getProjectUrl(queryParams), options).then(function (content) { var project = new Project(content); if (self._projectsById[project.getProjectId()] !== undefined) { self._projectsById[project.getProjectId()].update(project); @@ -714,7 +743,7 @@ ServerConnector.addProject = function(options) { self._projectsById[project.getProjectId()] = project; } return project; - }).then(null, function(error) { + }).then(null, function (error) { if ((error instanceof NetworkError)) { switch (error.statusCode) { case HttpStatus.FORBIDDEN: @@ -728,7 +757,7 @@ ServerConnector.addProject = function(options) { }); }; -ServerConnector.serialize = function(object) { +ServerConnector.serialize = function (object) { var result = {}; if (object instanceof Annotation) { result.type = object.getType(); @@ -739,12 +768,12 @@ ServerConnector.serialize = function(object) { return result; }; -ServerConnector.getProjects = function(reload) { +ServerConnector.getProjects = function (reload) { var self = this; if (self._projects.length > 0 && !reload) { return Promise.resolve(self._projects); } else { - return self.sendGetRequest(self.getProjectsUrl()).then(function(content) { + return self.sendGetRequest(self.getProjectsUrl()).then(function (content) { var parsedData = JSON.parse(content); self._projects.length = 0; for (var i = 0; i < parsedData.length; i++) { @@ -761,42 +790,42 @@ ServerConnector.getProjects = function(reload) { } }; -ServerConnector.getProjectStatistics = function(projectId) { +ServerConnector.getProjectStatistics = function (projectId) { var queryParams = {}; var filterParams = {}; var self = this; var content; - return self.getProjectId(projectId).then(function(result) { + return self.getProjectId(projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getProjectStatisticsUrl(queryParams, filterParams)); - }).then(function(result) { + }).then(function (result) { content = JSON.parse(result); return self.getConfiguration(); - }).then(function(configuration) { + }).then(function (configuration) { return new ProjectStatistics(content, configuration); }); }; -ServerConnector.getLoggedUser = function() { +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) { + return self.getUser(self.getSessionData().getLogin()).then(function (user) { self._loggedUser = user; return self._loggedUser; }); } }; -ServerConnector.getUser = function(login) { +ServerConnector.getUser = function (login) { var self = this; var queryParams = { - login : login, + login: login, }; var filterParams = {}; - return self.sendGetRequest(self.getUserUrl(queryParams, filterParams)).then(function(content) { + return self.sendGetRequest(self.getUserUrl(queryParams, filterParams)).then(function (content) { var obj = JSON.parse(content); var user = new User(obj); if (self._usersByLogin[user.getLogin()] !== undefined) { @@ -808,15 +837,15 @@ ServerConnector.getUser = function(login) { }); }; -ServerConnector.updateUserPrivileges = function(params) { +ServerConnector.updateUserPrivileges = function (params) { var self = this; var queryParams = { - login : params.user.getLogin(), + login: params.user.getLogin(), }; return self.sendPatchRequest(self.getUpdateUserPrivilegesUrl(queryParams), { - privileges : params.privileges - }).then(function(content) { + privileges: params.privileges + }).then(function (content) { var obj = JSON.parse(content); var user = new User(obj); if (self._usersByLogin[user.getLogin()] !== undefined) { @@ -828,13 +857,13 @@ ServerConnector.updateUserPrivileges = function(params) { }); }; -ServerConnector.getUsers = function(forceRefresh) { +ServerConnector.getUsers = function (forceRefresh) { var self = this; if (self._users.length > 0 && !forceRefresh) { return Promise.resolve(self._users); } else { - return self.sendGetRequest(self.getUsersUrl()).then(function(content) { + return self.sendGetRequest(self.getUsersUrl()).then(function (content) { var parsedData = JSON.parse(content); self._users.length = 0; for (var i = 0; i < parsedData.length; i++) { @@ -852,21 +881,21 @@ ServerConnector.getUsers = function(forceRefresh) { }; -ServerConnector.getOverlays = function(params) { +ServerConnector.getOverlays = function (params) { var self = this; if (params === undefined) { params = {}; } var queryParams = {}; var filterParams = { - creator : params.creator, - publicOverlay : params.publicOverlay, + creator: params.creator, + publicOverlay: params.publicOverlay, }; - return new Promise(function(resolve, reject) { - self.getProjectId(params.projectId).then(function(result) { + return new Promise(function (resolve, reject) { + self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getOverlaysUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var arr = JSON.parse(content); var result = []; for (var i = 0; i < arr.length; i++) { @@ -878,20 +907,20 @@ ServerConnector.getOverlays = function(params) { }); }; -ServerConnector.getOverlayElements = function(overlayId, projectId) { +ServerConnector.getOverlayElements = function (overlayId, projectId) { var self = this; if (overlayId === undefined) { throw new Error("Layout id must be defined"); } var queryParams = { - overlayId : overlayId, - modelId : "*", + overlayId: overlayId, + modelId: "*", }; var filterParams = {}; - return self.getProjectId(projectId).then(function(result) { + return self.getProjectId(projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getOverlayElementsUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var arr = JSON.parse(content); var result = []; for (var i = 0; i < arr.length; i++) { @@ -908,20 +937,20 @@ ServerConnector.getOverlayElements = function(overlayId, projectId) { }); }; -ServerConnector.getFullOverlayElement = function(params) { +ServerConnector.getFullOverlayElement = function (params) { var self = this; var queryParams = { - overlayId : params.overlay.getId(), - modelId : params.element.getModelId(), - id : params.element.getId(), + overlayId: params.overlay.getId(), + modelId: params.element.getModelId(), + id: params.element.getId(), }; var filterParams = {}; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getFullOverlayElementUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var element = JSON.parse(content); var result = null; if (element.type === "REACTION") { @@ -935,7 +964,7 @@ ServerConnector.getFullOverlayElement = function(params) { }); }; -ServerConnector.getProjectId = function(projectId) { +ServerConnector.getProjectId = function (projectId) { var self = this; if (projectId !== undefined && projectId !== null && projectId !== "") { return Promise.resolve(projectId); @@ -946,33 +975,33 @@ ServerConnector.getProjectId = function(projectId) { } }; -ServerConnector.getLogoImg = function() { +ServerConnector.getLogoImg = function () { return this.getConfigurationParam(ConfigurationType.LOGO_IMG); }; -ServerConnector.getLogoLink = function() { +ServerConnector.getLogoLink = function () { return this.getConfigurationParam(ConfigurationType.LOGO_LINK); }; -ServerConnector.getMaxSearchDistance = function() { +ServerConnector.getMaxSearchDistance = function () { return this.getConfigurationParam(ConfigurationType.SEARCH_DISTANCE); }; -ServerConnector.getOverlayById = function(overlayId, projectId) { +ServerConnector.getOverlayById = function (overlayId, projectId) { var self = this; var queryParams = { - overlayId : overlayId + overlayId: overlayId }; var filterParams = {}; - return self.getProjectId(projectId).then(function(data) { + return self.getProjectId(projectId).then(function (data) { queryParams.projectId = data; return self.sendGetRequest(self.getOverlayByIdUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { return new LayoutData(JSON.parse(content)); }); }; -ServerConnector.getReactions = function(params) { +ServerConnector.getReactions = function (params) { var self = this; var queryParams = {}; if (params.ids === undefined) { @@ -982,11 +1011,11 @@ ServerConnector.getReactions = function(params) { params.participantId = []; } var filterParams = { - id : params.ids, - columns : params.columns, - participantId : params.participantId, + id: params.ids, + columns: params.columns, + participantId: params.participantId, }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; if (filterParams.id.length > 100 || filterParams.participantId.length > 100) { return self.sendPostRequest(self.getReactionsUrl(queryParams), filterParams); @@ -994,7 +1023,7 @@ ServerConnector.getReactions = function(params) { return self.sendGetRequest(self.getReactionsUrl(queryParams, filterParams)); } - }).then(function(content) { + }).then(function (content) { var array = JSON.parse(content); var result = []; for (var i = 0; i < array.length; i++) { @@ -1004,10 +1033,10 @@ ServerConnector.getReactions = function(params) { }); }; -ServerConnector.getAliases = function(params) { +ServerConnector.getAliases = function (params) { var self = this; var queryParams = { - modelId : params.modelId, + modelId: params.modelId, }; if (params.ids === undefined) { params.ids = []; @@ -1019,21 +1048,21 @@ ServerConnector.getAliases = function(params) { params.excludedCompartmentIds = []; } var filterParams = { - id : params.ids, - columns : params.columns, - type : params.type, - excludedCompartmentIds : params.excludedCompartmentIds, - includedCompartmentIds : params.includedCompartmentIds, + id: params.ids, + columns: params.columns, + type: params.type, + excludedCompartmentIds: params.excludedCompartmentIds, + includedCompartmentIds: params.includedCompartmentIds, }; - return self.getProjectId(params.projectId).then(function(result) { + 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.sendGetRequest(self.getAliasesUrl(queryParams, filterParams)); } - }).then(function(content) { + }).then(function (content) { var array = JSON.parse(content); var result = []; for (var i = 0; i < array.length; i++) { @@ -1043,25 +1072,25 @@ ServerConnector.getAliases = function(params) { }); }; -ServerConnector.getLightComments = function(params) { - params.columns = [ "id", "elementId", "modelId", "type", "icon", "removed", "pinned" ]; +ServerConnector.getLightComments = function (params) { + params.columns = ["id", "elementId", "modelId", "type", "icon", "removed", "pinned"]; return this.getComments(params); }; -ServerConnector.getComments = function(params) { +ServerConnector.getComments = function (params) { var self = this; var queryParams = { - elementId : params.elementId, - elementType : params.elementType, - coordinates : params.coordinates, + elementId: params.elementId, + elementType: params.elementType, + coordinates: params.coordinates, }; var filterParams = { - columns : params.columns + columns: params.columns }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getCommentsUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var array = JSON.parse(content); var result = []; for (var i = 0; i < array.length; i++) { @@ -1071,7 +1100,7 @@ ServerConnector.getComments = function(params) { }); }; -ServerConnector.getSessionData = function(project) { +ServerConnector.getSessionData = function (project) { if (this._sessionData === undefined) { this._sessionData = new SessionData(project); } @@ -1081,19 +1110,19 @@ ServerConnector.getSessionData = function(project) { return this._sessionData; }; -ServerConnector.getClosestElementsByCoordinates = function(params) { +ServerConnector.getClosestElementsByCoordinates = function (params) { var self = this; var queryParams = { - modelId : params.modelId + modelId: params.modelId }; var filterParams = { - coordinates : params.coordinates, - count : params.count, + coordinates: params.coordinates, + count: params.count, }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getSearchUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var array = JSON.parse(content); var result = []; for (var i = 0; i < array.length; i++) { @@ -1103,7 +1132,7 @@ ServerConnector.getClosestElementsByCoordinates = function(params) { }); }; -ServerConnector.login = function(login, password) { +ServerConnector.login = function (login, password) { var self = this; var params = {}; if (login !== undefined && login !== "") { @@ -1113,10 +1142,10 @@ ServerConnector.login = function(login, password) { params.login = "anonymous"; } self.getSessionData().setToken(""); - return self.sendPostRequest(self.loginUrl(), params).then(function() { + return self.sendPostRequest(self.loginUrl(), params).then(function () { self.getSessionData().setLogin(params.login); return Promise.resolve(self.getSessionData().getToken()); - }, function(error) { + }, function (error) { if (error instanceof NetworkError && error.statusCode === HttpStatus.FORBIDDEN) { throw new InvalidCredentialsError("Invalid credentials"); } else { @@ -1125,27 +1154,27 @@ ServerConnector.login = function(login, password) { }); }; -ServerConnector.logout = function() { +ServerConnector.logout = function () { var self = this; self.getSessionData().setToken(undefined); self.getSessionData().setLogin(undefined); return self.sendGetRequest(self.logoutUrl()); }; -ServerConnector.getElementsByQuery = function(params) { +ServerConnector.getElementsByQuery = function (params) { var self = this; var queryParams = { - modelId : params.modelId + modelId: params.modelId }; var filterParams = { - query : params.query, - perfectMatch : params.perfectMatch, + query: params.query, + perfectMatch: params.perfectMatch, }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getSearchUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var array = JSON.parse(content); var result = []; for (var i = 0; i < array.length; i++) { @@ -1155,16 +1184,16 @@ ServerConnector.getElementsByQuery = function(params) { }); }; -ServerConnector.getDrugsByQuery = function(params) { +ServerConnector.getDrugsByQuery = function (params) { var self = this; var queryParams = {}; var filterParams = { - query : params.query + query: params.query }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getSearchDrugsUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var array = JSON.parse(content); var result = []; for (var i = 0; i < array.length; i++) { @@ -1174,16 +1203,16 @@ ServerConnector.getDrugsByQuery = function(params) { }); }; -ServerConnector.getMiRnasByQuery = function(params) { +ServerConnector.getMiRnasByQuery = function (params) { var self = this; var queryParams = {}; var filterParams = { - query : params.query + query: params.query }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getSearchMiRnasUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var array = JSON.parse(content); var result = []; for (var i = 0; i < array.length; i++) { @@ -1193,16 +1222,16 @@ ServerConnector.getMiRnasByQuery = function(params) { }); }; -ServerConnector.getChemicalsByQuery = function(params) { +ServerConnector.getChemicalsByQuery = function (params) { var self = this; var queryParams = {}; var filterParams = { - query : params.query + query: params.query }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getSearchChemicalsUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var array = JSON.parse(content); var result = []; for (var i = 0; i < array.length; i++) { @@ -1212,96 +1241,96 @@ ServerConnector.getChemicalsByQuery = function(params) { }); }; -ServerConnector.getOverlaySourceDownloadUrl = function(params) { +ServerConnector.getOverlaySourceDownloadUrl = function (params) { var self = this; var queryParams = { - overlayId : params.overlayId + overlayId: params.overlayId }; var filterParams = {}; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.getOverlaySourceUrl(queryParams, filterParams); }); }; -ServerConnector.getImageDownloadUrl = function(params) { +ServerConnector.getImageDownloadUrl = function (params) { var self = this; var queryParams = { - projectId : params.projectId, - modelId : params.modelId, + 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), + 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) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.getImageUrl(queryParams, filterParams); }); }; -ServerConnector.getModelDownloadUrl = function(params) { +ServerConnector.getModelDownloadUrl = function (params) { var self = this; var queryParams = { - projectId : params.projectId, - modelId : params.modelId, + 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), + 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) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.getModelPartUrl(queryParams, filterParams); }); }; -ServerConnector.getImageConverters = function() { +ServerConnector.getImageConverters = function () { var self = this; - return self.getConfiguration().then(function(configuration) { + return self.getConfiguration().then(function (configuration) { return configuration.getImageConverters(); }); }; -ServerConnector.getModelConverters = function() { +ServerConnector.getModelConverters = function () { var self = this; - return self.getConfiguration().then(function(configuration) { + return self.getConfiguration().then(function (configuration) { return configuration.getModelConverters(); }); }; -ServerConnector.getProjectSourceDownloadUrl = function(params) { +ServerConnector.getProjectSourceDownloadUrl = function (params) { if (params === undefined) { params = {}; } var queryParams = {}; var filterParams = {}; var self = this; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.getProjectSourceUrl(queryParams, filterParams); }); }; -ServerConnector.getDrugNamesByTarget = function(params) { +ServerConnector.getDrugNamesByTarget = function (params) { var self = this; var queryParams = {}; var filterParams = { - columns : [ "name" ], - target : params.target.getType() + ":" + params.target.getId() + columns: ["name"], + target: params.target.getType() + ":" + params.target.getId() }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getSearchDrugsUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var result = []; var object = JSON.parse(content); for (var i = 0; i < object.length; i++) { @@ -1311,17 +1340,17 @@ ServerConnector.getDrugNamesByTarget = function(params) { }); }; -ServerConnector.getMiRnaNamesByTarget = function(params) { +ServerConnector.getMiRnaNamesByTarget = function (params) { var self = this; var queryParams = {}; var filterParams = { - columns : [ "name" ], - target : params.target.getType() + ":" + params.target.getId() + columns: ["name"], + target: params.target.getType() + ":" + params.target.getId() }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getSearchMiRnasUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var result = []; var object = JSON.parse(content); for (var i = 0; i < object.length; i++) { @@ -1331,17 +1360,17 @@ ServerConnector.getMiRnaNamesByTarget = function(params) { }); }; -ServerConnector.getChemicalNamesByTarget = function(params) { +ServerConnector.getChemicalNamesByTarget = function (params) { var self = this; var queryParams = {}; var filterParams = { - columns : [ "name" ], - target : params.target.getType() + ":" + params.target.getId() + columns: ["name"], + target: params.target.getType() + ":" + params.target.getId() }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getSearchChemicalsUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { var result = []; var object = JSON.parse(content); for (var i = 0; i < object.length; i++) { @@ -1351,13 +1380,13 @@ ServerConnector.getChemicalNamesByTarget = function(params) { }); }; -ServerConnector.addComment = function(params) { +ServerConnector.addComment = function (params) { var self = this; var queryParams = { - elementId : params.elementId, - elementType : params.elementType, - coordinates : self.pointToString(params.coordinates), - modelId : params.modelId, + elementId: params.elementId, + elementType: params.elementType, + coordinates: self.pointToString(params.coordinates), + modelId: params.modelId, }; var filterParams = params; delete filterParams.elementId; @@ -1368,16 +1397,16 @@ ServerConnector.addComment = function(params) { filterParams.coordinates = self.pointToString(params.coordinates); } delete filterParams.modelId; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendPostRequest(self.addCommentUrl(queryParams), filterParams); - }).then(function(content) { + }).then(function (content) { var response = JSON.parse(content); return new Comment(response); }); }; -ServerConnector.addOverlay = function(params) { +ServerConnector.addOverlay = function (params) { var overlay = params.overlay; if (!(overlay instanceof LayoutData)) { throw new Error("Invalid overlay: " + overlay); @@ -1385,79 +1414,79 @@ ServerConnector.addOverlay = function(params) { var self = this; var queryParams = {}; var data = { - name : overlay.getName(), - description : overlay.getDescription(), - content : overlay.getContent(), - filename : overlay.getFilename(), + name: overlay.getName(), + description: overlay.getDescription(), + content: overlay.getContent(), + filename: overlay.getFilename(), }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendPostRequest(self.addOverlayUrl(queryParams), data); - }).then(function(content) { + }).then(function (content) { return new LayoutData(JSON.parse(content)); }); }; -ServerConnector.updateOverlay = function(overlay) { +ServerConnector.updateOverlay = function (overlay) { var self = this; var queryParams = { - overlayId : overlay.getId(), + overlayId: overlay.getId(), }; var filterParams = { - overlay : { - name : overlay.getName(), - description : overlay.getDescription(), - creator : overlay.getCreator(), - publicOverlay : overlay.getPublicOverlay(), + overlay: { + name: overlay.getName(), + description: overlay.getDescription(), + creator: overlay.getCreator(), + publicOverlay: overlay.getPublicOverlay(), } }; return self.sendPatchRequest(self.updateOverlayUrl(queryParams), filterParams); }; -ServerConnector.removeOverlay = function(params) { +ServerConnector.removeOverlay = function (params) { var self = this; var queryParams = { - overlayId : params.overlayId + overlayId: params.overlayId }; var filterParams = {}; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendDeleteRequest(self.deleteOverlayUrl(queryParams), filterParams); }); }; -ServerConnector.removeComment = function(params) { +ServerConnector.removeComment = function (params) { var self = this; var queryParams = { - commentId : params.commentId + commentId: params.commentId }; var filterParams = {}; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendDeleteRequest(self.deleteCommentUrl(queryParams), filterParams); }); }; -ServerConnector.getSuggestedQueryList = function(projectId) { +ServerConnector.getSuggestedQueryList = function (projectId) { var self = this; - return self.getProjectId(projectId).then(function(result) { + return self.getProjectId(projectId).then(function (result) { projectId = result; return self.sendGetRequest(self.getSuggestedQueryListUrl({ - projectId : projectId + projectId: projectId })); - }).then(function(content) { + }).then(function (content) { return JSON.parse(content); }); }; -ServerConnector.getOverlayTypes = function() { +ServerConnector.getOverlayTypes = function () { var self = this; - return self.getConfiguration().then(function(configuration) { + return self.getConfiguration().then(function (configuration) { return configuration.getOverlayTypes(); }); }; -ServerConnector.getPublications = function(params) { +ServerConnector.getPublications = function (params) { var self = this; if (params === undefined) { params = {}; @@ -1465,24 +1494,24 @@ ServerConnector.getPublications = function(params) { var queryParams = {}; var filterParams = { - start : params.start, - length : params.length, - sortColumn : params.sortColumn, - sortOrder : params.sortOrder, - search : params.search, + start: params.start, + length: params.length, + sortColumn: params.sortColumn, + sortOrder: params.sortOrder, + search: params.search, }; - return self.getProjectId(params.projectId).then(function(result) { + return self.getProjectId(params.projectId).then(function (result) { queryParams.projectId = result; return self.sendGetRequest(self.getPublicationsUrl(queryParams, filterParams)); - }).then(function(content) { + }).then(function (content) { return JSON.parse(content); }); }; -ServerConnector.getReferenceGenome = function(params) { +ServerConnector.getReferenceGenome = function (params) { var self = this; var filterParams = {}; - return self.sendGetRequest(self.getReferenceGenomeUrl(params, filterParams)).then(function(content) { + return self.sendGetRequest(self.getReferenceGenomeUrl(params, filterParams)).then(function (content) { return new ReferenceGenome(JSON.parse(content)); }); }; diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js index fbc215fbe7..7bc7d1d163 100644 --- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js @@ -13,11 +13,11 @@ var GuiConnector = require('../../GuiConnector'); var Promise = require("bluebird"); function MapsAdminPanel(params) { - var self = this; - AbstractAdminPanel.call(self, params); - self._createGui(); + var self = this; + AbstractAdminPanel.call(self, params); + self._createGui(); - $(self.getElement()).addClass("minerva-projects-tab"); + $(self.getElement()).addClass("minerva-projects-tab"); } @@ -25,256 +25,264 @@ MapsAdminPanel.prototype = Object.create(AbstractAdminPanel.prototype); MapsAdminPanel.prototype.constructor = MapsAdminPanel; MapsAdminPanel.prototype._createGui = function () { - var self = this; - var projectsDiv = Functions.createElement({ - type: "div", - }); - self.getElement().appendChild(projectsDiv); - - var dataDiv = Functions.createElement({ - type: "div", - style: "display:table; width:100%", - }); - projectsDiv.appendChild(dataDiv); - - dataDiv.appendChild(self._createMenuRow()); - dataDiv.appendChild(self._createProjectTableRow()); - dataDiv.appendChild(self._createMenuRow()); + var self = this; + var projectsDiv = Functions.createElement({ + type: "div", + }); + self.getElement().appendChild(projectsDiv); + + var dataDiv = Functions.createElement({ + type: "div", + style: "display:table; width:100%", + }); + projectsDiv.appendChild(dataDiv); + + dataDiv.appendChild(self._createMenuRow()); + dataDiv.appendChild(self._createProjectTableRow()); + dataDiv.appendChild(self._createMenuRow()); }; MapsAdminPanel.prototype._createMenuRow = function () { - var self = this; - var menuRow = Functions.createElement({ - type: "div", - className: "minerva-menu-row", - style: "display:table-row; margin:10px", - }); - - var addProjectButton = Functions.createElement({ - type: "button", - name: "addProject", - content: '<span class="ui-icon ui-icon-circle-plus"></span> ADD PROJECT', - onclick: function () { - return self.onAddClicked().then(null, GuiConnector.alert); - }, - }); - var refreshButton = Functions.createElement({ - type: "button", - name: "refreshProject", - content: '<span class="ui-icon ui-icon-refresh"></span> REFRESH', - onclick: function () { - return self.onRefreshClicked().then(null, GuiConnector.alert); - }, - }); - menuRow.appendChild(addProjectButton); - menuRow.appendChild(refreshButton); - return menuRow; + var self = this; + var menuRow = Functions.createElement({ + type: "div", + className: "minerva-menu-row", + style: "display:table-row; margin:10px", + }); + + var addProjectButton = Functions.createElement({ + type: "button", + name: "addProject", + content: '<span class="ui-icon ui-icon-circle-plus"></span> ADD PROJECT', + onclick: function () { + return self.onAddClicked().then(null, GuiConnector.alert); + }, + }); + var refreshButton = Functions.createElement({ + type: "button", + name: "refreshProject", + content: '<span class="ui-icon ui-icon-refresh"></span> REFRESH', + onclick: function () { + return self.onRefreshClicked().then(null, GuiConnector.alert); + }, + }); + menuRow.appendChild(addProjectButton); + menuRow.appendChild(refreshButton); + return menuRow; }; MapsAdminPanel.prototype._createProjectTableRow = function () { - var self = this; - var projectsRow = Functions.createElement({ - type: "div", - style: "display:table-row; width:100%", - }); - - var projectsTable = Functions.createElement({ - type: "table", - name: "projectsTable", - className: "display", - style: "width:100%", - }); - projectsRow.appendChild(projectsTable); - - $(projectsTable).DataTable({ - fnRowCallback: function (nRow, aData) { - nRow.setAttribute('id', aData[0]); - }, - columns: [{ - title: 'ProjectId', - }, { - title: 'Name', - }, { - title: 'Disease', - }, { - title: 'Organism', - }, { - title: 'Status', - }, { - title: 'Edit', - }, { - title: 'Remove', - },], - }); - $(projectsTable).on("click", "[name='removeProject']", function () { - var button = this; - return self.removeProject($(button).attr("data")).then(null, GuiConnector.alert); - }); - - $(projectsTable).on("click", "[name='showEditDialog']", function () { - var button = this; - return self.showEditDialog($(button).attr("data")).then(null, GuiConnector.alert); - }); - - return projectsRow; + var self = this; + var projectsRow = Functions.createElement({ + type: "div", + style: "display:table-row; width:100%", + }); + + var projectsTable = Functions.createElement({ + type: "table", + name: "projectsTable", + className: "display", + style: "width:100%", + }); + projectsRow.appendChild(projectsTable); + + $(projectsTable).DataTable({ + fnRowCallback: function (nRow, aData) { + nRow.setAttribute('id', aData[0]); + }, + columns: [{ + title: 'ProjectId', + }, { + title: 'Name', + }, { + title: 'Disease', + }, { + title: 'Organism', + }, { + title: 'Status', + }, { + title: 'Edit', + }, { + title: 'Remove', + },], + }); + $(projectsTable).on("click", "[name='removeProject']", function () { + var button = this; + return self.removeProject($(button).attr("data")).then(null, GuiConnector.alert); + }); + + $(projectsTable).on("click", "[name='showEditDialog']", function () { + var button = this; + return self.showEditDialog($(button).attr("data")).then(null, GuiConnector.alert); + }); + + return projectsRow; }; MapsAdminPanel.prototype.init = function () { - var self = this; - return ServerConnector.getProjects().then(function (projects) { - return self.setProjects(projects); - }); + var self = this; + return ServerConnector.getProjects().then(function (projects) { + return self.setProjects(projects); + }); }; MapsAdminPanel.prototype.projectToTableRow = function (project, row) { - var self = this; - var disease = self.getHtmlStringLink(project.getDisease()); - var organism = self.getHtmlStringLink(project.getOrganism()); - - if (row === undefined) { - row = []; - } - row[0] = project.getProjectId(); - row[1] = project.getName(); - row[2] = disease; - row[3] = organism; - row[4] = project.getStatus(); - row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'>EDIT</button>"; - row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'>REMOVE</button>"; - - return row; + var self = this; + var disease = self.getHtmlStringLink(project.getDisease()); + var organism = self.getHtmlStringLink(project.getOrganism()); + + if (row === undefined) { + row = []; + } + var projectId = project.getProjectId(); + var formattedProjectId; + if (project.getStatus().toLowerCase() === "ok") { + formattedProjectId = "<a href='" + "index.xhtml?id=" + projectId + "' target='" + projectId + "'>" + projectId + "</a>"; + } else { + formattedProjectId = projectId + } + + row[0] = formattedProjectId; + row[1] = project.getName(); + row[2] = disease; + row[3] = organism; + row[4] = project.getStatus(); + row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'>EDIT</button>"; + row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'>REMOVE</button>"; + + return row; }; MapsAdminPanel.prototype.getHtmlStringLink = function (annotation) { - var self = this; - if (annotation !== undefined && annotation !== null) { - var link = self.getGuiUtils().createAnnotationLink(annotation, true); - var tmp = document.createElement("div"); - tmp.appendChild(link); - return tmp.innerHTML; - } else { - return "N/A"; - } + var self = this; + if (annotation !== undefined && annotation !== null) { + var link = self.getGuiUtils().createAnnotationLink(annotation, true); + var tmp = document.createElement("div"); + tmp.appendChild(link); + return tmp.innerHTML; + } else { + return "N/A"; + } }; MapsAdminPanel.prototype.setProjects = function (projects) { - var self = this; - var dataTable = $($("[name='projectsTable']", self.getElement())[0]).DataTable(); - var data = []; - for (var i = 0; i < projects.length; i++) { - var project = projects[i]; - var rowData = self.projectToTableRow(project); - self.addUpdateListener(project, rowData); - data.push(rowData); - } - dataTable.clear().rows.add(data).draw(); + var self = this; + var dataTable = $($("[name='projectsTable']", self.getElement())[0]).DataTable(); + var data = []; + for (var i = 0; i < projects.length; i++) { + var project = projects[i]; + var rowData = self.projectToTableRow(project); + self.addUpdateListener(project, rowData); + data.push(rowData); + } + dataTable.clear().rows.add(data).draw(); }; MapsAdminPanel.prototype.addUpdateListener = function (project, dataTableRow) { - var self = this; - - var listenerName = "PROJECT_LIST_LISTENER"; - var listeners = project.getListeners("onreload"); - for (var i = 0; i < listeners.length; i++) { - if (listeners[i].listenerName === listenerName) { - project.removeListener("onreload", listeners[i]); - } + var self = this; + + var listenerName = "PROJECT_LIST_LISTENER"; + var listeners = project.getListeners("onreload"); + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].listenerName === listenerName) { + project.removeListener("onreload", listeners[i]); + } + } + var listener = function () { + self.projectToTableRow(project, dataTableRow); + var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId()); + if (row.length > 0) { + row.data(dataTableRow).draw(); } - var listener = function () { - self.projectToTableRow(project, dataTableRow); - var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId()); - if (row.length > 0) { - row.data(dataTableRow).draw(); - } - - }; - listener.listenerName = listenerName; - project.addListener("onreload", listener); + + }; + listener.listenerName = listenerName; + project.addListener("onreload", listener); }; MapsAdminPanel.prototype.onAddClicked = function () { - var self = this; - var dialog = self._addDialog; - if (dialog === undefined) { - dialog = new AddProjectDialog({ - element: Functions.createElement({ - type: "div" - }), - customMap: null, - }); - self._addDialog = dialog; - return dialog.init().then(function () { - return dialog.open(); - }); - } else { - dialog.clear(); - dialog.open(); - return Promise.resolve(); - } + var self = this; + var dialog = self._addDialog; + if (dialog === undefined) { + dialog = new AddProjectDialog({ + element: Functions.createElement({ + type: "div" + }), + customMap: null, + }); + self._addDialog = dialog; + return dialog.init().then(function () { + return dialog.open(); + }); + } else { + dialog.clear(); + dialog.open(); + return Promise.resolve(); + } }; MapsAdminPanel.prototype.destroy = function () { - var self = this; - var dialog = self._addDialog; - if (dialog !== undefined) { - dialog.destroy(); - } - var table = $("[name='projectsTable']", self.getElement())[0]; - if ($.fn.DataTable.isDataTable(table)) { - $(table).DataTable().destroy(); - } + var self = this; + var dialog = self._addDialog; + if (dialog !== undefined) { + dialog.destroy(); + } + var table = $("[name='projectsTable']", self.getElement())[0]; + if ($.fn.DataTable.isDataTable(table)) { + $(table).DataTable().destroy(); + } }; MapsAdminPanel.prototype.onRefreshClicked = function () { - var self = this; - return ServerConnector.getProjects(true).then(function (projects) { - return self.setProjects(projects); - }); + var self = this; + return ServerConnector.getProjects(true).then(function (projects) { + return self.setProjects(projects); + }); }; MapsAdminPanel.prototype.getDialog = function (project) { - var self = this; - if (self._dialogs === undefined) { - self._dialogs = []; - } - var dialog = self._dialogs[project.getProjectId()]; - if (dialog === undefined) { - dialog = new EditProjectDialog({ - element: Functions.createElement({ - type: "div" - }), - project: project, - customMap: null, - }); - self._dialogs[project.getProjectId()] = dialog; - return dialog.init().then(function () { - return dialog; - }); - } else { - return Promise.resolve(dialog); - } + var self = this; + if (self._dialogs === undefined) { + self._dialogs = []; + } + var dialog = self._dialogs[project.getProjectId()]; + if (dialog === undefined) { + dialog = new EditProjectDialog({ + element: Functions.createElement({ + type: "div" + }), + project: project, + customMap: null, + }); + self._dialogs[project.getProjectId()] = dialog; + return dialog.init().then(function () { + return dialog; + }); + } else { + return Promise.resolve(dialog); + } }; MapsAdminPanel.prototype.showEditDialog = function (id) { - var self = this; - GuiConnector.showProcessing(); - return ServerConnector.getProject(id).then(function (project) { - return self.getDialog(project); - }).then(function (dialog) { - - dialog.open(); - GuiConnector.hideProcessing(); - }).then(null, function (error) { - GuiConnector.hideProcessing(); - return Promise.reject(error); - }); + var self = this; + GuiConnector.showProcessing(); + return ServerConnector.getProject(id).then(function (project) { + return self.getDialog(project); + }).then(function (dialog) { + + dialog.open(); + GuiConnector.hideProcessing(); + }).then(null, function (error) { + GuiConnector.hideProcessing(); + return Promise.reject(error); + }); }; MapsAdminPanel.prototype.removeProject = function (id) { - return Promise.reject(new Error("Not implemented")); + return ServerConnector.removeProject(id); }; module.exports = MapsAdminPanel; diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js index 0b35b2445c..d5f88e3e4e 100644 --- a/frontend-js/src/test/js/ServerConnector-test.js +++ b/frontend-js/src/test/js/ServerConnector-test.js @@ -60,6 +60,17 @@ describe('ServerConnector', function() { }); }); }); + describe('removeProject', function() { + it('default', function() { + var project; + return ServerConnector.getProject().then(function(result) { + project = result; + return ServerConnector.removeProject(project.getProjectId()); + }).then(function(result) { + assert.ok(project === result); + }); + }); + }); it('getModels', function() { return ServerConnector.getModels("sample").then(function(models) { diff --git a/frontend-js/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID& new file mode 100644 index 0000000000..d8aff0348e --- /dev/null +++ b/frontend-js/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID& @@ -0,0 +1 @@ +{"version":"0","disease":{"resource":"D010300","link":"http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300","id":1104479,"type":"MESH_2012"},"organism":{"resource":"1570291","link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=1570291","id":1104480,"type":"TAXONOMY"},"idObject":14898,"status":"Ok","progress":100.0,"name":"UNKNOWN DISEASE MAP","projectId":"sample","overviewImageViews":[],"topOverviewImage":null} \ No newline at end of file diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java index eb4bfd9d6c..793084e98a 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java @@ -71,6 +71,15 @@ public class ProjectController extends BaseController { } + @RequestMapping(value = "/projects/{projectId:.+}", method = { RequestMethod.DELETE }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public ProjectMetaData removeProject(// + @PathVariable(value = "projectId") String projectId, // + @CookieValue(value = Configuration.AUTH_TOKEN) String token // + ) throws SecurityException, IOException, QueryException { + return projectController.removeProject(token, projectId, context.getRealPath("/")); + + } + @RequestMapping(value = "/projects/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) public List<ProjectMetaData> getProjects(// @CookieValue(value = Configuration.AUTH_TOKEN) String token // diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java index 265fb97e79..652a49ce9e 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java @@ -544,4 +544,11 @@ public class ProjectRestImpl extends BaseRestImpl { return null; } + public ProjectMetaData removeProject(String token, String projectId, String path) throws ObjectNotFoundException, SecurityException { + AuthenticationToken authenticationToken = getUserService().getToken(token); + Project project = getProjectService().getProjectByProjectId(projectId, authenticationToken); + getProjectService().removeProject(project, path, true, authenticationToken); + return getProject(projectId, token); + } + } diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java index 21ccc3f302..173b6102c2 100644 --- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java +++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java @@ -50,6 +50,7 @@ import lcsb.mapviewer.model.user.UserAnnotationSchema; import lcsb.mapviewer.model.user.UserClassAnnotators; import lcsb.mapviewer.model.user.UserClassValidAnnotations; import lcsb.mapviewer.persist.dao.map.species.ElementDao; +import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.ServiceTestFunctions; import lcsb.mapviewer.services.UserAccessException; import lcsb.mapviewer.services.overlay.AnnotatedObjectTreeRow; @@ -692,7 +693,7 @@ public class ProjectServiceTest extends ServiceTestFunctions { } } - protected Project createComplexProject(String projectId, String filename) throws IOException, UserAccessException { + protected Project createComplexProject(String projectId, String filename) throws IOException, SecurityException { CreateProjectParams params = new CreateProjectParams(); ZipFile zipFile = new ZipFile(filename); diff --git a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java index 4f3bf0c8d8..2dc3e22ad0 100644 --- a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java +++ b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java @@ -54,6 +54,7 @@ import lcsb.mapviewer.model.map.model.SubmodelType; import lcsb.mapviewer.model.user.ConfigurationElementType; import lcsb.mapviewer.model.user.PrivilegeType; import lcsb.mapviewer.model.user.User; +import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.UserAccessException; import lcsb.mapviewer.services.interfaces.IConfigurationService; import lcsb.mapviewer.services.interfaces.IModelService; @@ -623,9 +624,9 @@ public class ProjectBean extends AbstractManagedBean implements Serializable { * * @param file * file with the model in CellDesigner format - * @throws UserAccessException + * @throws SecurityException */ - protected void generateProject(final File file) throws UserAccessException { + protected void generateProject(final File file) throws SecurityException { // if project with this name already exists then add random suffix String projectId = getNewProjectId(); if (projectService.projectExists(getNewProjectId())) { -- GitLab