diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index be4326930546415c4a0b49fd5d97c79e8eb119c0..68766ff3829299e58f9ad2c982c3765cf15e1019 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -892,6 +892,8 @@ ServerConnector.serialize = function (object) { if (object instanceof Annotation) { result.type = object.getType(); result.resource = object.getResource(); + } else if (object === undefined) { + result = undefined; } else { throw new Error("Unhandled object type: " + (typeof object)); } diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js index d9eb87fa1d9a5df2e2082ba39e432538396b986d..bb29ff5b380e4460fe3d50afd69e33d9b315ee25 100644 --- a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js +++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js @@ -738,7 +738,11 @@ AddProjectDialog.prototype.getDisease = function () { AddProjectDialog.prototype.getOrganism = function () { return $("[name='project-organism']", this.getElement()).val(); }; -AddProjectDialog.prototype.getOrganism = function () { +AddProjectDialog.prototype.setOrganism = function (organism) { + $("[name='project-organism']", this.getElement()).val(organism); +}; + +AddProjectDialog.prototype.getVersion = function () { return $("[name='project-version']", this.getElement()).val(); }; AddProjectDialog.prototype.getNotifyEmail = function () { @@ -834,6 +838,7 @@ AddProjectDialog.prototype.onSaveClicked = function () { "cache": self.isCache(), "notify-email": self.getNotifyEmail(), "disease": self.getDisease(), + "version": self.getVersion(), "organism": self.getOrganism(), "sbgn": self.isSbgn(), "semantic-zoom": self.isSemanticZooming(), diff --git a/frontend-js/src/main/js/map/window/ReactionInfoWindow.js b/frontend-js/src/main/js/map/window/ReactionInfoWindow.js index cd95953aba95b1b4d21b82e8aee0725bb6942b17..d92d32e4fb6df942b00ba64dc595ce8b15a0b68c 100644 --- a/frontend-js/src/main/js/map/window/ReactionInfoWindow.js +++ b/frontend-js/src/main/js/map/window/ReactionInfoWindow.js @@ -69,7 +69,11 @@ ReactionInfoWindow.prototype.createContentDiv = function () { result.appendChild(Functions.createElement({type: "h4", content: "Kinetic law"})); if (kineticLaw.getMathMlPresentation() !== undefined) { - result.appendChild(Functions.createElement({type: "div", content: kineticLaw.getMathMlPresentation()})); + result.appendChild(Functions.createElement({ + type: "div", + content: kineticLaw.getMathMlPresentation(), + xss: false + })); } else { result.appendChild(Functions.createElement({ @@ -93,7 +97,7 @@ ReactionInfoWindow.prototype.createContentDiv = function () { return Promise.all(promises); }).then(function (parameters) { result.appendChild(self.createSbmlParameterDiv(parameters)); - result.appendChild(self.createKineticsElementsDiv(reaction.getElements())); + result.appendChild(self.createKineticsElementsDiv(reaction)); }).then(function () { return Promise.resolve(result); }); @@ -141,15 +145,27 @@ ReactionInfoWindow.prototype.createSbmlParameterDiv = function (parameters) { return result; }; -ReactionInfoWindow.prototype.createKineticsElementsDiv = function (elements) { +ReactionInfoWindow.prototype.createKineticsElementsDiv = function (reaction) { var result = Functions.createElement({type: "div"}); result.appendChild(Functions.createElement({type: "h5", content: "Elements: "})); var guiUtils = new GuiUtils(); var table = Functions.createElement({type: "div", style: "display: table;", className: "borderTable"}); - table.appendChild(guiUtils.createTableRow(["Name", "elementId", "Constant", "Boundary condition", "Initial concentration", "Initial amount"])); - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - table.appendChild(guiUtils.createTableRow([element.getName(), element.getElementId(), element.getConstant(), element.getBoundaryCondition(), element.getInitialConcentration(), element.getInitialAmount()])); + table.appendChild(guiUtils.createTableRow(["Name", "Role", "elementId", "Constant", "Boundary condition", "Initial concentration", "Initial amount"])); + var elements = reaction.getReactants(); + var i, element; + for (i = 0; i < elements.length; i++) { + element = elements[i]; + table.appendChild(guiUtils.createTableRow([element.getName(), "Reactant", element.getElementId(), element.getConstant(), element.getBoundaryCondition(), element.getInitialConcentration(), element.getInitialAmount()])); + } + elements = reaction.getProducts(); + for (i = 0; i < elements.length; i++) { + element = elements[i]; + table.appendChild(guiUtils.createTableRow([element.getName(), "Product", element.getElementId(), element.getConstant(), element.getBoundaryCondition(), element.getInitialConcentration(), element.getInitialAmount()])); + } + elements = reaction.getModifiers(); + for (i = 0; i < elements.length; i++) { + element = elements[i]; + table.appendChild(guiUtils.createTableRow([element.getName(), "Modifier", element.getElementId(), element.getConstant(), element.getBoundaryCondition(), element.getInitialConcentration(), element.getInitialAmount()])); } result.appendChild(table); return result; diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js index 358de90d21be53977765f28462ec4aa263713476..22fc81ae7c319256c2f882850c25fa558320465d 100644 --- a/frontend-js/src/test/js/ServerConnector-test.js +++ b/frontend-js/src/test/js/ServerConnector-test.js @@ -59,6 +59,12 @@ describe('ServerConnector', function () { assert.equal(newVersion, result.getVersion()); }); }); + + it('empty data', function () { + var project = new Project({projectId: "empty"}); + + return ServerConnector.updateProject(project); + }); }); describe('removeProject', function () { it('default', function () { diff --git a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js index f76d54a2d73f8d2c9ffd53312fc935a7d159137d..001ebcf429c7849127914323323b488b4f1d21e7 100644 --- a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js +++ b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js @@ -150,6 +150,8 @@ describe('AddProjectDialog', function () { assert.ok(options["disease"] !== undefined); assert.ok(options["organism"] !== undefined); assert.ok(options["sbgn"] !== undefined); + assert.ok(options["version"] !== undefined); + assert.ok(options["semantic-zoom"] !== undefined); }).finally(function () { return dialog.destroy(); @@ -157,6 +159,16 @@ describe('AddProjectDialog', function () { }); }); + it('getOrganism', function () { + var dialog = new AddProjectDialog({ + element: testDiv, + customMap: null + }); + dialog.setOrganism("9606"); + assert.equal("9606", dialog.getOrganism()); + return dialog.destroy(); + }); + describe('checkValidity', function () { it('invalid project name', function () { var dialog = new AddProjectDialog({ diff --git a/frontend-js/testFiles/apiCalls/projects/empty/PATCH_token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/empty/PATCH_token=MOCK_TOKEN_ID& new file mode 100644 index 0000000000000000000000000000000000000000..3eb029a6a4b48bea672fcad78a20ad6d4b058ef9 --- /dev/null +++ b/frontend-js/testFiles/apiCalls/projects/empty/PATCH_token=MOCK_TOKEN_ID& @@ -0,0 +1 @@ +{"version":"0","disease":null,"organism":null,"idObject":19187,"status":"Ok","progress":100.0,"name":"UNKNOWN DISEASE MAP","projectId":"empty","overviewImageViews":[],"topOverviewImage":null} \ No newline at end of file diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java index 8c0c2eda1812a616168fa520a712ec04569cab03..b037f9c1254f29fc1b9bd1634a392dd444070167 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -1023,7 +1023,7 @@ public class ProjectService implements IProjectService { if (taxonomyBackend.getNameForTaxonomy(organism) != null) { project.setOrganism(organism); } else { - logger.warn("No valid organism is provided for project:" + project.getName()); + logger.warn(project.getProjectId()+"\tNo valid organism is provided for project. " + organism); } modelDao.update(originalModel);