From 2a65dc71b9555cea125c560aa278a4539650fc24 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 20 Jul 2018 14:31:32 +0200
Subject: [PATCH] updating default coordinates and zoom lvel for submap fixed

---
 .../api/projects/models/ModelRestImpl.java     | 18 ++++++------------
 .../mapviewer/services/impl/ModelService.java  | 17 ++++++++++++++++-
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java
index 6ec57b25d1..78c6e8a518 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java
@@ -5,7 +5,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.TreeMap;
 
 import org.apache.log4j.Logger;
 import org.springframework.transaction.annotation.Transactional;
@@ -82,25 +81,20 @@ public class ModelRestImpl extends BaseRestImpl {
 
   public Map<String, Object> updateModel(String projectId, String modelId, Map<String, Object> data, String token)
       throws SecurityException, QueryException {
-    Project project = getProjectService().getProjectByProjectId(projectId, token);
-    if (project == null) {
-      throw new ObjectNotFoundException("Project with given id doesn't exist");
-    }
     boolean canModify = getUserService().userHasPrivilege(token, PrivilegeType.ADD_MAP);
     if (!canModify) {
       throw new SecurityException("You cannot update projects");
     }
-    ModelData model = null;
-    Integer id = Integer.valueOf(modelId);
-    for (ModelData m : project.getModels()) {
-      if (m.getId().equals(id)) {
-        model = m;
-      }
+
+    if (modelId.equals("*")) {
+      throw new QueryException("Invalid model id: " + modelId);
     }
-    if (model == null) {
+    List<Model> models = super.getModels(projectId, modelId, token);
+    if (models.size() != 1) {
       throw new ObjectNotFoundException("Model with given id doesn't exist");
     }
 
+    ModelData model = models.get(0).getModelData();
     Set<String> fields = data.keySet();
     for (String fieldName : fields) {
       Object value = data.get(fieldName);
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ModelService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ModelService.java
index e99042cdee..e1b62c352d 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ModelService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ModelService.java
@@ -19,11 +19,14 @@ import lcsb.mapviewer.commands.CopyCommand;
 import lcsb.mapviewer.common.IProgressUpdater;
 import lcsb.mapviewer.common.Pair;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
+import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelData;
 import lcsb.mapviewer.model.map.model.ModelFullIndexed;
+import lcsb.mapviewer.model.map.model.ModelSubmodelConnection;
+import lcsb.mapviewer.model.map.model.SubmodelConnection;
 import lcsb.mapviewer.model.map.reaction.Reaction;
 import lcsb.mapviewer.model.map.species.Element;
 import lcsb.mapviewer.model.user.PrivilegeType;
@@ -389,7 +392,19 @@ public class ModelService implements IModelService {
 
   @Override
   public void updateModel(ModelData model, String token) throws lcsb.mapviewer.services.SecurityException {
-    Model topCachedData = getLastModelByProjectId(model.getProject().getProjectId(), token);
+    Project project = model.getProject();
+    if (project == null) {
+      for (SubmodelConnection sc : model.getParentModels()) {
+        if (sc instanceof ModelSubmodelConnection) {
+          project = ((ModelSubmodelConnection) sc).getParentModel().getModel().getProject();
+          if (project != null) {
+            break;
+          }
+        }
+      }
+    }
+
+    Model topCachedData = getLastModelByProjectId(project.getProjectId(), token);
     Model cachedData = topCachedData.getSubmodelById(model.getId());
     cachedData.setDefaultCenterX(model.getDefaultCenterX());
     cachedData.setDefaultCenterY(model.getDefaultCenterY());
-- 
GitLab