From 5ef965d5d962c999a0ce1891f779a03fdef0793f Mon Sep 17 00:00:00 2001
From: Piotr Gawron <p.gawron@atcomp.pl>
Date: Thu, 19 Dec 2024 12:41:15 +0100
Subject: [PATCH] enable edition of layer object with all children

---
 .../project/map/layer/NewLayerController.java | 10 ++----
 .../api/project/map/layer/NewLayerDTO.java    |  8 ++---
 .../map/layer/image/NewImageController.java   | 10 ++----
 .../project/map/layer/image/NewImageDTO.java  |  2 +-
 .../layer/line/NewLayerLineController.java    | 10 ++----
 .../map/layer/oval/NewOvalController.java     | 10 ++----
 .../project/map/layer/oval/NewOvalDTO.java    | 23 ++++---------
 .../map/layer/rect/NewRectController.java     | 10 ++----
 .../project/map/layer/rect/NewRectDTO.java    | 26 +++++---------
 .../map/layer/text/NewTextController.java     | 10 ++----
 .../project/map/layer/text/NewTextDTO.java    | 34 +++++++------------
 11 files changed, 47 insertions(+), 106 deletions(-)

diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/NewLayerController.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/NewLayerController.java
index d409cdbd1c..67c161b8f1 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/NewLayerController.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/NewLayerController.java
@@ -7,7 +7,6 @@ import lcsb.mapviewer.persist.dao.graphics.LayerProperty;
 import lcsb.mapviewer.services.ObjectNotFoundException;
 import lcsb.mapviewer.services.interfaces.ILayerService;
 import lcsb.mapviewer.services.interfaces.IModelService;
-import lcsb.mapviewer.services.interfaces.IProjectService;
 import lcsb.mapviewer.web.api.NewApiResponseSerializer;
 import org.hibernate.validator.constraints.NotBlank;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,7 +43,6 @@ import java.util.Map;
 public class NewLayerController {
 
   private final IModelService modelService;
-  private final IProjectService projectService;
   private final ILayerService layerService;
   private final NewApiResponseSerializer serializer;
 
@@ -52,12 +50,10 @@ public class NewLayerController {
   public NewLayerController(
       final IModelService modelService,
       final NewApiResponseSerializer serializer,
-      final ILayerService layerService,
-      final IProjectService projectService) {
+      final ILayerService layerService) {
     this.modelService = modelService;
     this.serializer = serializer;
     this.layerService = layerService;
-    this.projectService = projectService;
   }
 
   @PreAuthorize("hasAnyAuthority('IS_ADMIN', 'READ_PROJECT:' + #projectId)")
@@ -95,7 +91,7 @@ public class NewLayerController {
 
     final Layer layer = new Layer();
 
-    data.saveToLayer(layer, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToLayer(layer);
     layer.setModel(model);
     layerService.add(layer);
 
@@ -113,7 +109,7 @@ public class NewLayerController {
       throws QueryException, ObjectNotFoundException {
     final Layer layer = getLayerFromService(projectId, mapId, layerId);
     serializer.checkETag(oldETag, layer);
-    data.saveToLayer(layer, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToLayer(layer);
     layerService.update(layer);
 
     return serializer.prepareResponse(getLayerFromService(projectId, mapId, layerId));
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/NewLayerDTO.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/NewLayerDTO.java
index 20e397d62c..358857e7fe 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/NewLayerDTO.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/NewLayerDTO.java
@@ -18,16 +18,12 @@ public class NewLayerDTO extends AbstractDTO {
 
   private boolean locked;
 
-  public void saveToLayer(final Layer layer, final boolean allowLayoutChanges) throws QueryException {
+  public void saveToLayer(final Layer layer) throws QueryException {
     if (layer.getLayerId() == null) {
       layer.setLayerId(UUID.randomUUID().toString());
     }
 
-    if (!allowLayoutChanges) {
-      checkEquality("visible", visible, layer.isVisible());
-    } else {
-      layer.setVisible(visible);
-    }
+    layer.setVisible(visible);
     layer.setName(name);
     layer.setLocked(locked);
   }
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/image/NewImageController.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/image/NewImageController.java
index d7b4c0cfb5..dee38d149b 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/image/NewImageController.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/image/NewImageController.java
@@ -11,7 +11,6 @@ import lcsb.mapviewer.services.ObjectNotFoundException;
 import lcsb.mapviewer.services.interfaces.IGlyphService;
 import lcsb.mapviewer.services.interfaces.ILayerImageService;
 import lcsb.mapviewer.services.interfaces.ILayerService;
-import lcsb.mapviewer.services.interfaces.IProjectService;
 import lcsb.mapviewer.web.api.NewApiResponseSerializer;
 import org.hibernate.validator.constraints.NotBlank;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,7 +46,6 @@ import java.util.Map;
     produces = MediaType.APPLICATION_JSON_VALUE)
 public class NewImageController {
 
-  private final IProjectService projectService;
   private final ILayerService layerService;
   private final NewApiResponseSerializer serializer;
   private final ILayerImageService layerImageService;
@@ -58,11 +56,9 @@ public class NewImageController {
       final NewApiResponseSerializer serializer,
       final ILayerService layerService,
       final ILayerImageService layerImageService,
-      final IProjectService projectService,
       final IGlyphService glyphService) {
     this.serializer = serializer;
     this.layerService = layerService;
-    this.projectService = projectService;
     this.layerImageService = layerImageService;
     this.glyphService = glyphService;
   }
@@ -111,8 +107,7 @@ public class NewImageController {
 
     final LayerImage image = new LayerImage();
 
-    data.saveToLayer(image, projectService.getBackgrounds(projectId, false).isEmpty(),
-        (glyphId) -> getGlyphFromService(projectId, glyphId));
+    data.saveToLayer(image, (glyphId) -> getGlyphFromService(projectId, glyphId));
     image.setLayer(layer);
 
     layerImageService.add(image);
@@ -145,8 +140,7 @@ public class NewImageController {
       throws QueryException, ObjectNotFoundException {
     final LayerImage image = getImageFromService(projectId, mapId, layerId, imageId);
     serializer.checkETag(oldETag, image);
-    data.saveToLayer(image, projectService.getBackgrounds(projectId, false).isEmpty(),
-        (glyphId) -> getGlyphFromService(projectId, glyphId));
+    data.saveToLayer(image, (glyphId) -> getGlyphFromService(projectId, glyphId));
     layerImageService.update(image);
 
     return serializer.prepareResponse(getImageFromService(projectId, mapId, layerId, imageId));
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/image/NewImageDTO.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/image/NewImageDTO.java
index cd4fe9dc6b..e60c994c48 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/image/NewImageDTO.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/image/NewImageDTO.java
@@ -27,7 +27,7 @@ public class NewImageDTO extends AbstractDTO {
 
   private Integer glyph;
 
-  public void saveToLayer(final LayerImage image, final boolean allowLayoutChanges, final CheckedFunction<Integer, Glyph> getGlyphById)
+  public void saveToLayer(final LayerImage image, final CheckedFunction<Integer, Glyph> getGlyphById)
       throws QueryException {
     image.setX(x);
     image.setY(y);
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/line/NewLayerLineController.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/line/NewLayerLineController.java
index 4bbefe2814..8fea65d7a6 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/line/NewLayerLineController.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/line/NewLayerLineController.java
@@ -8,7 +8,6 @@ import lcsb.mapviewer.persist.dao.graphics.PolylineDataProperty;
 import lcsb.mapviewer.services.ObjectNotFoundException;
 import lcsb.mapviewer.services.interfaces.ILayerLineService;
 import lcsb.mapviewer.services.interfaces.ILayerService;
-import lcsb.mapviewer.services.interfaces.IProjectService;
 import lcsb.mapviewer.web.api.NewApiResponseSerializer;
 import lcsb.mapviewer.web.api.project.map.bioentity.reaction.NewLineDTO;
 import org.hibernate.validator.constraints.NotBlank;
@@ -45,7 +44,6 @@ import java.util.Map;
     produces = MediaType.APPLICATION_JSON_VALUE)
 public class NewLayerLineController {
 
-  private final IProjectService projectService;
   private final ILayerLineService layerLineService;
   private final ILayerService layerService;
   private final NewApiResponseSerializer serializer;
@@ -54,10 +52,8 @@ public class NewLayerLineController {
   public NewLayerLineController(
       final NewApiResponseSerializer serializer,
       final ILayerLineService layerLineService,
-      final ILayerService layerService,
-      final IProjectService projectService) {
+      final ILayerService layerService) {
     this.serializer = serializer;
-    this.projectService = projectService;
     this.layerLineService = layerLineService;
     this.layerService = layerService;
   }
@@ -103,7 +99,7 @@ public class NewLayerLineController {
       throws QueryException, ObjectNotFoundException {
     final PolylineData line = getLineFromService(projectId, mapId, layerId, lineId);
     serializer.checkETag(oldETag, line);
-    data.saveToLine(line, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToLine(line, true);
     layerLineService.update(line);
 
     return serializer.prepareResponse(getLineFromService(projectId, mapId, layerId, lineId));
@@ -154,7 +150,7 @@ public class NewLayerLineController {
 
     final PolylineData line = new PolylineData();
 
-    data.saveToLine(line, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToLine(line, true);
     line.setLayer(layer);
     layerLineService.add(line);
 
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/oval/NewOvalController.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/oval/NewOvalController.java
index 1532719bb8..e326741c78 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/oval/NewOvalController.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/oval/NewOvalController.java
@@ -8,7 +8,6 @@ import lcsb.mapviewer.persist.dao.graphics.LayerProperty;
 import lcsb.mapviewer.services.ObjectNotFoundException;
 import lcsb.mapviewer.services.interfaces.ILayerOvalService;
 import lcsb.mapviewer.services.interfaces.ILayerService;
-import lcsb.mapviewer.services.interfaces.IProjectService;
 import lcsb.mapviewer.web.api.NewApiResponseSerializer;
 import org.hibernate.validator.constraints.NotBlank;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,7 +43,6 @@ import java.util.Map;
     produces = MediaType.APPLICATION_JSON_VALUE)
 public class NewOvalController {
 
-  private final IProjectService projectService;
   private final ILayerService layerService;
   private final NewApiResponseSerializer serializer;
   private final ILayerOvalService layerOvalService;
@@ -53,11 +51,9 @@ public class NewOvalController {
   public NewOvalController(
       final NewApiResponseSerializer serializer,
       final ILayerService layerService,
-      final ILayerOvalService layerOvalService,
-      final IProjectService projectService) {
+      final ILayerOvalService layerOvalService) {
     this.serializer = serializer;
     this.layerService = layerService;
-    this.projectService = projectService;
     this.layerOvalService = layerOvalService;
   }
 
@@ -105,7 +101,7 @@ public class NewOvalController {
 
     final LayerOval oval = new LayerOval();
 
-    data.saveToLayer(oval, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToOval(oval);
     oval.setLayer(layer);
 
     layerOvalService.add(oval);
@@ -138,7 +134,7 @@ public class NewOvalController {
       throws QueryException, ObjectNotFoundException {
     final LayerOval oval = getOvalFromService(projectId, mapId, layerId, ovalId);
     serializer.checkETag(oldETag, oval);
-    data.saveToLayer(oval, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToOval(oval);
     layerOvalService.update(oval);
 
     return serializer.prepareResponse(getOvalFromService(projectId, mapId, layerId, ovalId));
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/oval/NewOvalDTO.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/oval/NewOvalDTO.java
index ad8d2a69b8..ba7f99e31c 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/oval/NewOvalDTO.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/oval/NewOvalDTO.java
@@ -27,22 +27,13 @@ public class NewOvalDTO extends AbstractDTO {
   @NotNull
   private Integer z;
 
-  public void saveToLayer(final LayerOval oval, final boolean allowLayoutChanges) throws QueryException {
-    if (!allowLayoutChanges) {
-      checkEquality("color", color, oval.getColor());
-      checkEquality("x", x, oval.getX());
-      checkEquality("y", y, oval.getY());
-      checkEquality("z", z, oval.getZ());
-      checkEquality("width", width, oval.getWidth());
-      checkEquality("height", height, oval.getHeight());
-    } else {
-      oval.setColor(color);
-      oval.setX(x);
-      oval.setY(y);
-      oval.setZ(z);
-      oval.setWidth(width);
-      oval.setHeight(height);
-    }
+  public void saveToOval(final LayerOval oval) throws QueryException {
+    oval.setColor(color);
+    oval.setX(x);
+    oval.setY(y);
+    oval.setZ(z);
+    oval.setWidth(width);
+    oval.setHeight(height);
   }
 
   public Color getColor() {
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/rect/NewRectController.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/rect/NewRectController.java
index 9aea6dc472..2ac282b110 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/rect/NewRectController.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/rect/NewRectController.java
@@ -8,7 +8,6 @@ import lcsb.mapviewer.persist.dao.graphics.LayerRectProperty;
 import lcsb.mapviewer.services.ObjectNotFoundException;
 import lcsb.mapviewer.services.interfaces.ILayerRectService;
 import lcsb.mapviewer.services.interfaces.ILayerService;
-import lcsb.mapviewer.services.interfaces.IProjectService;
 import lcsb.mapviewer.web.api.NewApiResponseSerializer;
 import org.hibernate.validator.constraints.NotBlank;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,7 +43,6 @@ import java.util.Map;
     produces = MediaType.APPLICATION_JSON_VALUE)
 public class NewRectController {
 
-  private final IProjectService projectService;
   private final ILayerService layerService;
   private final NewApiResponseSerializer serializer;
   private final ILayerRectService layerRectService;
@@ -53,11 +51,9 @@ public class NewRectController {
   public NewRectController(
       final NewApiResponseSerializer serializer,
       final ILayerService layerService,
-      final ILayerRectService layerRectService,
-      final IProjectService projectService) {
+      final ILayerRectService layerRectService) {
     this.serializer = serializer;
     this.layerService = layerService;
-    this.projectService = projectService;
     this.layerRectService = layerRectService;
   }
 
@@ -105,7 +101,7 @@ public class NewRectController {
 
     final LayerRect rect = new LayerRect();
 
-    data.saveToLayer(rect, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToRectangle(rect);
     rect.setLayer(layer);
 
     layerRectService.add(rect);
@@ -138,7 +134,7 @@ public class NewRectController {
       throws QueryException, ObjectNotFoundException {
     final LayerRect rect = getRectFromService(projectId, mapId, layerId, rectId);
     serializer.checkETag(oldETag, rect);
-    data.saveToLayer(rect, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToRectangle(rect);
     layerRectService.update(rect);
 
     return serializer.prepareResponse(getRectFromService(projectId, mapId, layerId, rectId));
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/rect/NewRectDTO.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/rect/NewRectDTO.java
index 98d8253d47..5e59bf855e 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/rect/NewRectDTO.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/rect/NewRectDTO.java
@@ -30,24 +30,14 @@ public class NewRectDTO extends AbstractDTO {
   @NotNull
   private Integer z;
 
-  public void saveToLayer(final LayerRect rect, final boolean allowLayoutChanges) throws QueryException {
-    if (!allowLayoutChanges) {
-      checkEquality("fillColor", fillColor, rect.getFillColor());
-      checkEquality("borderColor", borderColor, rect.getBorderColor());
-      checkEquality("x", x, rect.getX());
-      checkEquality("y", y, rect.getY());
-      checkEquality("z", z, rect.getZ());
-      checkEquality("width", width, rect.getWidth());
-      checkEquality("height", height, rect.getHeight());
-    } else {
-      rect.setFillColor(fillColor);
-      rect.setBorderColor(borderColor);
-      rect.setX(x);
-      rect.setY(y);
-      rect.setZ(z);
-      rect.setWidth(width);
-      rect.setHeight(height);
-    }
+  public void saveToRectangle(final LayerRect rect) throws QueryException {
+    rect.setFillColor(fillColor);
+    rect.setBorderColor(borderColor);
+    rect.setX(x);
+    rect.setY(y);
+    rect.setZ(z);
+    rect.setWidth(width);
+    rect.setHeight(height);
   }
 
   public Double getX() {
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/text/NewTextController.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/text/NewTextController.java
index 831cdb48a4..77f2a92aea 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/text/NewTextController.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/text/NewTextController.java
@@ -8,7 +8,6 @@ import lcsb.mapviewer.persist.dao.graphics.LayerTextProperty;
 import lcsb.mapviewer.services.ObjectNotFoundException;
 import lcsb.mapviewer.services.interfaces.ILayerService;
 import lcsb.mapviewer.services.interfaces.ILayerTextService;
-import lcsb.mapviewer.services.interfaces.IProjectService;
 import lcsb.mapviewer.web.api.NewApiResponseSerializer;
 import org.hibernate.validator.constraints.NotBlank;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,7 +43,6 @@ import java.util.Map;
     produces = MediaType.APPLICATION_JSON_VALUE)
 public class NewTextController {
 
-  private final IProjectService projectService;
   private final ILayerService layerService;
   private final NewApiResponseSerializer serializer;
   private final ILayerTextService layerTextService;
@@ -53,11 +51,9 @@ public class NewTextController {
   public NewTextController(
       final NewApiResponseSerializer serializer,
       final ILayerService layerService,
-      final ILayerTextService layerTextService,
-      final IProjectService projectService) {
+      final ILayerTextService layerTextService) {
     this.serializer = serializer;
     this.layerService = layerService;
-    this.projectService = projectService;
     this.layerTextService = layerTextService;
   }
 
@@ -105,7 +101,7 @@ public class NewTextController {
 
     final LayerText text = new LayerText();
 
-    data.saveToLayer(text, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToText(text);
     text.setLayer(layer);
 
     layerTextService.add(text);
@@ -138,7 +134,7 @@ public class NewTextController {
       throws QueryException, ObjectNotFoundException {
     final LayerText text = getTextFromService(projectId, mapId, layerId, textId);
     serializer.checkETag(oldETag, text);
-    data.saveToLayer(text, projectService.getBackgrounds(projectId, false).isEmpty());
+    data.saveToText(text);
     layerTextService.update(text);
 
     return serializer.prepareResponse(getTextFromService(projectId, mapId, layerId, textId));
diff --git a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/text/NewTextDTO.java b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/text/NewTextDTO.java
index 8f3729e535..6a92fceeef 100644
--- a/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/text/NewTextDTO.java
+++ b/web/src/main/java/lcsb/mapviewer/web/api/project/map/layer/text/NewTextDTO.java
@@ -45,28 +45,18 @@ public class NewTextDTO extends AbstractDTO {
   private HorizontalAlign horizontalAlign;
 
 
-  public void saveToLayer(final LayerText text, final boolean allowLayoutChanges) throws QueryException {
-    if (!allowLayoutChanges) {
-      checkEquality("color", color, text.getColor());
-      checkEquality("borderColor", borderColor, text.getBorderColor());
-      checkEquality("x", x, text.getX());
-      checkEquality("y", y, text.getY());
-      checkEquality("z", z, text.getZ());
-      checkEquality("width", width, text.getWidth());
-      checkEquality("height", height, text.getHeight());
-    } else {
-      text.setColor(color);
-      text.setBorderColor(borderColor);
-      text.setNotes(notes);
-      text.setFontSize(fontSize);
-      text.setX(x);
-      text.setY(y);
-      text.setZ(z);
-      text.setWidth(width);
-      text.setHeight(height);
-      text.setVerticalAlign(verticalAlign);
-      text.setHorizontalAlign(horizontalAlign);
-    }
+  public void saveToText(final LayerText text) throws QueryException {
+    text.setColor(color);
+    text.setBorderColor(borderColor);
+    text.setNotes(notes);
+    text.setFontSize(fontSize);
+    text.setX(x);
+    text.setY(y);
+    text.setZ(z);
+    text.setWidth(width);
+    text.setHeight(height);
+    text.setVerticalAlign(verticalAlign);
+    text.setHorizontalAlign(horizontalAlign);
   }
 
   public Double getX() {
-- 
GitLab