From a3ff05f15ce24b07e5e1c3a8c99b73c7161382ce Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Thu, 7 Jul 2022 10:51:42 +0200 Subject: [PATCH] allow for partial update --- CHANGELOG | 6 ++ CellDesigner-plugin/pom.xml | 8 +-- annotation/pom.xml | 10 ++-- commons/pom.xml | 2 +- converter-CellDesigner/pom.xml | 6 +- converter-SBGNML/pom.xml | 10 ++-- converter-graphics/pom.xml | 6 +- converter-sbml/pom.xml | 12 ++-- converter/pom.xml | 4 +- frontend-js/pom.xml | 2 +- model-command/pom.xml | 6 +- model/pom.xml | 4 +- pathvisio/pom.xml | 10 ++-- persist/pom.xml | 4 +- pom.xml | 2 +- rest-api/pom.xml | 8 +-- .../api/projects/models/ModelController.java | 14 +++-- service/pom.xml | 18 +++--- web/pom.xml | 8 +-- .../web/MapControllerIntegrationTest.java | 56 +++++++++++++++++++ 20 files changed, 132 insertions(+), 64 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 4aa0b54ad..dc23f5d21 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +minerva (16.2.6) stable; urgency=medium + * Bug fix: partial update on defaultCenterX and defaultCenterY and defaultZoomLevel + did not work + + -- Piotr Gawron Thu, 7 Jul 2022 11:00:00 +0200 + minerva (16.2.5) stable; urgency=medium * Bug fix: defaultCenterX and defaultCenterY and defaultZoomLevel could not be updated at the same time (#1731) diff --git a/CellDesigner-plugin/pom.xml b/CellDesigner-plugin/pom.xml index 5e990232b..c631963bf 100644 --- a/CellDesigner-plugin/pom.xml +++ b/CellDesigner-plugin/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 CellDesigner-plugin @@ -50,19 +50,19 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 lcsb.mapviewer commons - 16.2.5 + 16.2.6 lcsb.mapviewer converter-CellDesigner - 16.2.5 + 16.2.6 diff --git a/annotation/pom.xml b/annotation/pom.xml index 274819229..c7ef7e144 100644 --- a/annotation/pom.xml +++ b/annotation/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 annotation Annotation module @@ -18,7 +18,7 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 @@ -26,7 +26,7 @@ lcsb.mapviewer persist - 16.2.5 + 16.2.6 diff --git a/commons/pom.xml b/commons/pom.xml index 02857d617..bf08e89d2 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 commons Mapviewer commons diff --git a/converter-CellDesigner/pom.xml b/converter-CellDesigner/pom.xml index 6b18dece6..2ca9bea15 100644 --- a/converter-CellDesigner/pom.xml +++ b/converter-CellDesigner/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 converter-CellDesigner CellDesigner converter @@ -17,13 +17,13 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 lcsb.mapviewer converter - 16.2.5 + 16.2.6 diff --git a/converter-SBGNML/pom.xml b/converter-SBGNML/pom.xml index bd6974e98..81f5d247b 100644 --- a/converter-SBGNML/pom.xml +++ b/converter-SBGNML/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 converter-SBGNML @@ -20,26 +20,26 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 lcsb.mapviewer persist - 16.2.5 + 16.2.6 test lcsb.mapviewer converter-CellDesigner - 16.2.5 + 16.2.6 lcsb.mapviewer converter-graphics - 16.2.5 + 16.2.6 diff --git a/converter-graphics/pom.xml b/converter-graphics/pom.xml index d11d7f7b2..cc0f9ef57 100644 --- a/converter-graphics/pom.xml +++ b/converter-graphics/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 converter-graphics MapViewer graphics converter @@ -18,13 +18,13 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 lcsb.mapviewer model-command - 16.2.5 + 16.2.6 diff --git a/converter-sbml/pom.xml b/converter-sbml/pom.xml index bd732d219..92e2f4c3a 100644 --- a/converter-sbml/pom.xml +++ b/converter-sbml/pom.xml @@ -7,7 +7,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 converter-sbml converter-sbml @@ -40,22 +40,22 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 lcsb.mapviewer model-command - 16.2.5 + 16.2.6 lcsb.mapviewer converter-CellDesigner - 16.2.5 + 16.2.6 lcsb.mapviewer converter - 16.2.5 + 16.2.6 @@ -154,7 +154,7 @@ lcsb.mapviewer converter-graphics - 16.2.5 + 16.2.6 test diff --git a/converter/pom.xml b/converter/pom.xml index 9a4fcbf99..28d1a66c0 100644 --- a/converter/pom.xml +++ b/converter/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 converter @@ -15,7 +15,7 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 xerces diff --git a/frontend-js/pom.xml b/frontend-js/pom.xml index 20703ebda..65f9e3b20 100644 --- a/frontend-js/pom.xml +++ b/frontend-js/pom.xml @@ -7,7 +7,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 frontend-js frontend-js diff --git a/model-command/pom.xml b/model-command/pom.xml index ec92eb41e..1f8359d45 100644 --- a/model-command/pom.xml +++ b/model-command/pom.xml @@ -3,7 +3,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 model-command Model commands @@ -16,7 +16,7 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 @@ -24,7 +24,7 @@ lcsb.mapviewer converter-CellDesigner - 16.2.5 + 16.2.6 diff --git a/model/pom.xml b/model/pom.xml index 4c7759a4d..84dae739b 100644 --- a/model/pom.xml +++ b/model/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 model model MapViewer @@ -15,7 +15,7 @@ lcsb.mapviewer commons - 16.2.5 + 16.2.6 diff --git a/pathvisio/pom.xml b/pathvisio/pom.xml index 5014f15fd..c62a43fc9 100644 --- a/pathvisio/pom.xml +++ b/pathvisio/pom.xml @@ -5,7 +5,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 pathvisio Pathvisio plugin @@ -77,26 +77,26 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 lcsb.mapviewer converter-CellDesigner - 16.2.5 + 16.2.6 lcsb.mapviewer converter-graphics test - 16.2.5 + 16.2.6 lcsb.mapviewer model-command - 16.2.5 + 16.2.6 diff --git a/persist/pom.xml b/persist/pom.xml index e9ebeb149..028b1a7ca 100644 --- a/persist/pom.xml +++ b/persist/pom.xml @@ -7,7 +7,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 persist @@ -27,7 +27,7 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 diff --git a/pom.xml b/pom.xml index 93a34a411..8fa1e9759 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 pom parent MapViewer diff --git a/rest-api/pom.xml b/rest-api/pom.xml index 2aeae5894..bf4f0b7ff 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -7,7 +7,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 rest-api rest-api @@ -19,19 +19,19 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 lcsb.mapviewer service - 16.2.5 + 16.2.6 lcsb.mapviewer pathvisio - 16.2.5 + 16.2.6 diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java index b0077718e..41c4aa842 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java @@ -236,16 +236,22 @@ public class ModelController extends BaseController { final @Valid @RequestBody UpdateModelBody body) throws IOException, QueryException { ModelData model = modelService.getModelByMapId(projectId, mapId); - if (body.getModel().getDefaultCenterX().isPresent()) { + if (body.getModel().getDefaultCenterX() == null) { + model.setDefaultCenterX(null); + } else if (body.getModel().getDefaultCenterX().isPresent()) { model.setDefaultCenterX(body.getModel().getDefaultCenterX().get().doubleValue()); } - if (body.getModel().getDefaultCenterY().isPresent()) { + if (body.getModel().getDefaultCenterY() == null) { + model.setDefaultCenterY(null); + } else if (body.getModel().getDefaultCenterY().isPresent()) { model.setDefaultCenterY(body.getModel().getDefaultCenterY().get().doubleValue()); } - if (body.getModel().getDefaultZoomLevel().isPresent()) { + if (body.getModel().getDefaultZoomLevel() == null) { + model.setDefaultZoomLevel(null); + } else if (body.getModel().getDefaultZoomLevel().isPresent()) { model.setDefaultZoomLevel(body.getModel().getDefaultZoomLevel().get().intValue()); } - if (body.getModel().getId().isPresent()) { + if (body.getModel().getId() != null && body.getModel().getId().isPresent()) { if (!Objects.equals(body.getModel().getId().get(), model.getId())) { throw new QueryException("Id doesn't match: " + body.getModel().getId().get() + ", " + model.getId()); } diff --git a/service/pom.xml b/service/pom.xml index cef31bbbf..b0680791c 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -7,7 +7,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 service @@ -20,7 +20,7 @@ lcsb.mapviewer model - 16.2.5 + 16.2.6 @@ -28,47 +28,47 @@ lcsb.mapviewer persist - 16.2.5 + 16.2.6 lcsb.mapviewer model-command - 16.2.5 + 16.2.6 lcsb.mapviewer annotation - 16.2.5 + 16.2.6 lcsb.mapviewer converter-CellDesigner - 16.2.5 + 16.2.6 lcsb.mapviewer converter-SBGNML - 16.2.5 + 16.2.6 lcsb.mapviewer converter-graphics - 16.2.5 + 16.2.6 lcsb.mapviewer converter-sbml - 16.2.5 + 16.2.6 diff --git a/web/pom.xml b/web/pom.xml index a8c60ef38..e3e3beb1b 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -7,7 +7,7 @@ lcsb.mapviewer parent - 16.2.5 + 16.2.6 web war @@ -33,19 +33,19 @@ lcsb.mapviewer service - 16.2.5 + 16.2.6 lcsb.mapviewer rest-api - 16.2.5 + 16.2.6 lcsb.mapviewer frontend-js - 16.2.5 + 16.2.6 diff --git a/web/src/test/java/lcsb/mapviewer/web/MapControllerIntegrationTest.java b/web/src/test/java/lcsb/mapviewer/web/MapControllerIntegrationTest.java index 4597c7c0f..a6badf6dd 100644 --- a/web/src/test/java/lcsb/mapviewer/web/MapControllerIntegrationTest.java +++ b/web/src/test/java/lcsb/mapviewer/web/MapControllerIntegrationTest.java @@ -738,6 +738,62 @@ public class MapControllerIntegrationTest extends ControllerIntegrationTest { assertEquals(zoom, updatedModel.getDefaultZoomLevel()); } + @Test + public void testUpdateMapWithNull() throws Exception { + MockHttpSession session = createSession(BUILT_IN_TEST_ADMIN_LOGIN, BUILT_IN_TEST_ADMIN_PASSWORD); + + map.setDefaultCenterX(1.0); + map.setDefaultCenterY(2.0); + map.setDefaultZoomLevel(3); + modelService.updateModel(map); + + Map> data = new HashMap<>(); + Map modelData = new HashMap<>(); + modelData.put("defaultCenterX", null); + modelData.put("defaultCenterY", null); + modelData.put("defaultZoomLevel", null); + data.put("model", modelData); + + RequestBuilder request = patch("/api/projects/{projectId}/models/{mapId}", TEST_PROJECT, map.getId()) + .contentType(MediaType.APPLICATION_JSON) + .session(session) + .content(objectMapper.writeValueAsString(data)); + + mockMvc.perform(request) + .andExpect(status().is2xxSuccessful()); + ModelData updatedModel = modelService.getModelByMapId(TEST_PROJECT, map.getId()); + assertNull(updatedModel.getDefaultCenterX()); + assertNull(updatedModel.getDefaultCenterY()); + assertNull(updatedModel.getDefaultZoomLevel()); + } + + @Test + public void testUpdateMapWithPartial() throws Exception { + MockHttpSession session = createSession(BUILT_IN_TEST_ADMIN_LOGIN, BUILT_IN_TEST_ADMIN_PASSWORD); + + map.setDefaultCenterX(1.0); + map.setDefaultCenterY(2.0); + map.setDefaultZoomLevel(3); + modelService.updateModel(map); + + Map> data = new HashMap<>(); + Map modelData = new HashMap<>(); + modelData.put("defaultCenterX", null); + data.put("model", modelData); + + RequestBuilder request = patch("/api/projects/{projectId}/models/{mapId}", TEST_PROJECT, map.getId()) + .contentType(MediaType.APPLICATION_JSON) + .session(session) + .content(objectMapper.writeValueAsString(data)); + + mockMvc.perform(request) + .andExpect(status().is2xxSuccessful()); + ModelData updatedModel = modelService.getModelByMapId(TEST_PROJECT, map.getId()); + assertNull(updatedModel.getDefaultCenterX()); + assertNotNull(updatedModel.getDefaultCenterY()); + assertNotNull(updatedModel.getDefaultZoomLevel()); + } + @Test public void testUpdateMapWithUndefinedProject() throws Exception { MockHttpSession session = createSession(BUILT_IN_TEST_ADMIN_LOGIN, BUILT_IN_TEST_ADMIN_PASSWORD); -- GitLab