From a20361dd713a7a21b85b41e00f90dfb14acbfa6b Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 9 Nov 2018 12:20:46 +0100 Subject: [PATCH] every dataOverlay is connected to not empty project --- .../lcsb/mapviewer/converter/ProjectFactory.java | 8 ++++++++ .../lcsb/mapviewer/model/map/layout/Layout.java | 15 +++++++++++++++ .../lcsb/mapviewer/model/map/model/ModelData.java | 6 ++++++ .../model/map/model/ModelFullIndexed.java | 3 +-- ...20181109__data_overlay_assigned_to_project.sql | 9 +++++++++ .../mapviewer/persist/dao/map/ModelDaoTest.java | 4 ++-- .../mapviewer/services/impl/LayoutService.java | 1 + .../mapviewer/services/impl/ProjectService.java | 7 ++++++- 8 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 persist/src/main/resources/db/migration/12.2.0~alpha.0/V12.2.0.20181109__data_overlay_assigned_to_project.sql diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java index 0ea9c18fae..fe701471bb 100644 --- a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java +++ b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java @@ -13,6 +13,7 @@ import org.apache.log4j.Logger; import lcsb.mapviewer.converter.zip.ImageZipEntryFile; import lcsb.mapviewer.converter.zip.ZipEntryFile; import lcsb.mapviewer.model.Project; +import lcsb.mapviewer.model.map.layout.Layout; import lcsb.mapviewer.model.map.model.Model; public class ProjectFactory { @@ -42,6 +43,13 @@ public class ProjectFactory { models.addAll(model.getSubmodels()); project.addModel(model); + + for (Model m: models) { + for (Layout layout: m.getLayouts()) { + layout.setProject(project); + } + } + ZipFile zipFile = params.getZipFile(); Enumeration<? extends ZipEntry> entries; diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/Layout.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/Layout.java index 1f1cedc367..b35a98c73c 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/layout/Layout.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/Layout.java @@ -23,6 +23,7 @@ import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; import lcsb.mapviewer.common.exception.NotImplementedException; +import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.cache.UploadedFileEntry; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelData; @@ -110,6 +111,12 @@ public class Layout implements Serializable { @ManyToOne(fetch = FetchType.LAZY) private ModelData model; + /** + * Project to which this data overlay is assigned. + */ + @ManyToOne(fetch = FetchType.LAZY, optional = false) + private Project project; + /** * Who created the layout. */ @@ -498,4 +505,12 @@ public class Layout implements Serializable { this.googleLicenseConsent = googleLicenseConsent; } + public Project getProject() { + return project; + } + + public void setProject(Project project) { + this.project = project; + } + } diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java index cfccd82386..5a9c6af372 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelData.java @@ -355,6 +355,9 @@ public class ModelData implements Serializable { public void addLayout(Layout layout) { layouts.add(layout); layout.setModel(this); + if (project != null) { + layout.setProject(project); + } } /** @@ -704,6 +707,9 @@ public class ModelData implements Serializable { public void addLayout(int index, Layout layout) { layouts.add(index, layout); layout.setModel(this); + if (project != null) { + layout.setProject(project); + } } public Double getDefaultCenterX() { diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java index d2fa990f16..8234d9723e 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java @@ -562,8 +562,7 @@ public class ModelFullIndexed implements Model { @Override public void addLayout(int index, Layout layout) { - this.modelData.getLayouts().add(index, layout); - layout.setModel(this); + this.modelData.addLayout(index, layout); } @Override diff --git a/persist/src/main/resources/db/migration/12.2.0~alpha.0/V12.2.0.20181109__data_overlay_assigned_to_project.sql b/persist/src/main/resources/db/migration/12.2.0~alpha.0/V12.2.0.20181109__data_overlay_assigned_to_project.sql new file mode 100644 index 0000000000..63d27d6007 --- /dev/null +++ b/persist/src/main/resources/db/migration/12.2.0~alpha.0/V12.2.0.20181109__data_overlay_assigned_to_project.sql @@ -0,0 +1,9 @@ +alter table layout_table add column project_id integer; +update layout_table set project_id = (select project_id from model_data_table where model_data_table.id = layout_table.model_id); +update layout_table child set project_id = (select project_id from model_data_table where model_data_table.id = (select model_id from layout_table parent where child.parent_layout_id = parent.id)) where child.parent_layout_id is not null; +-- just in case we have some artifacts in database +delete from layout_table where project_id is null; +-- and now we can add foreign key +ALTER TABLE layout_table ADD CONSTRAINT layout_table_project FOREIGN KEY (project_id) + REFERENCES public.project_table (id) MATCH SIMPLE + ON UPDATE NO ACTION ON DELETE NO ACTION; diff --git a/persist/src/test/java/lcsb/mapviewer/persist/dao/map/ModelDaoTest.java b/persist/src/test/java/lcsb/mapviewer/persist/dao/map/ModelDaoTest.java index 162f85c7ab..7be2b5e560 100644 --- a/persist/src/test/java/lcsb/mapviewer/persist/dao/map/ModelDaoTest.java +++ b/persist/src/test/java/lcsb/mapviewer/persist/dao/map/ModelDaoTest.java @@ -384,14 +384,14 @@ public class ModelDaoTest extends PersistTestFunctions { @Test public void testLayoutsInModel() throws Exception { try { + Project project = new Project("test_porject_id"); Model model = createModel(); + project.addModel(model); Layout layout = new Layout(); layout.setDirectory("tmp"); layout.setTitle("temporary name"); model.addLayout(layout); - Project project = new Project("test_porject_id"); - project.addModel(model); projectDao.add(project); modelDao.evict(model); diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java index 5d54aa3c72..a878393e75 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java @@ -443,6 +443,7 @@ public class LayoutService implements ILayoutService { layout.setStatus(LayoutStatus.OK); layout.setProgress(0.0); connection.getSubmodel().getModel().addLayout(layout); + layout.setProject(params.getModel().getProject()); layout.setCreator(params.getUser()); layout.setPublicLayout(false); topLayout.addLayout(layout); 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 a00b4eeb22..5df7543f52 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -636,6 +636,7 @@ public class ProjectService implements IProjectService { semanticOverlay.setProgress(0.0); semanticOverlay.setHierarchicalView(buildInLayout.isNested()); semanticOverlay.setHierarchyViewLevel(i); + semanticOverlay.setProject(topModel.getProject()); semanticLevelOverlays.add(semanticOverlay); topModel.addLayout(1, semanticOverlay); } @@ -648,6 +649,7 @@ public class ProjectService implements IProjectService { layout.setHierarchicalView(buildInLayout.isNested()); layout.setParentLayout(topLayout); connection.getSubmodel().addLayout(0, layout); + layout.setProject(topModel.getProject()); connection.getSubmodel().setZoomLevels(generator.computeZoomLevels(connection.getSubmodel().getModel())); connection.getSubmodel().setTileSize(MapGenerator.TILE_SIZE); @@ -661,13 +663,16 @@ public class ProjectService implements IProjectService { semanticOverlay.setHierarchicalView(buildInLayout.isNested()); semanticOverlay.setParentLayout(semanticLevelOverlays.get(i)); semanticOverlay.setHierarchyViewLevel(i); + semanticOverlay.setProject(topModel.getProject()); connection.getSubmodel().addLayout(1, semanticOverlay); } } submodelId++; } } - + projectDao.update(project); + + if (params.isUpdateAnnotations()) { Map<Class<?>, List<ElementAnnotator>> annotators = null; if (params.getAnnotatorsMap() != null) { -- GitLab