diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ProjectExportTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ProjectExportTest.java index dded4298bdca5eaf2d5480d40ed5ded68117e3bf..57001079c87ca067e121c547b66889480533695f 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ProjectExportTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ProjectExportTest.java @@ -12,7 +12,6 @@ import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelData; import lcsb.mapviewer.model.map.model.ModelSubmodelConnection; import lcsb.mapviewer.model.map.model.SubmodelType; -import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.model.map.species.Protein; import org.junit.After; import org.junit.Before; @@ -87,6 +86,19 @@ public class ProjectExportTest extends CellDesignerTestFunctions { testSerializationOverZip(project); } + @Test + public void testImmediateLink() throws Exception { + Project project = createProject(); + Model model = createEmptyModel(); + model.setWidth(260); + Protein protein = createProtein(); + protein.setImmediateLink("https://uni.lu/"); + model.addElement(protein); + project.addModel(model); + + testSerializationOverZip(project); + } + private void testSerializationOverZip(final Project project) throws Exception { File tempFile = File.createTempFile("CD-", ".zip"); try (FileOutputStream outputStream = new FileOutputStream(tempFile)) { @@ -101,10 +113,6 @@ public class ProjectExportTest extends CellDesignerTestFunctions { } for (ModelData model : project2.getModels()) { clearModelFromZ(model); - - for (Element element : model.getElements()) { - logger.debug(element.getSubmodel()); - } } assertEquals(0, projectComparator.compare(project, project2)); diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java b/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java index bea7b0376e89ae1e8ebf0502f8ce3f6629bfcadc..5d6bc2741c2dc10b2f18223f019874358c771f2b 100644 --- a/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java +++ b/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java @@ -64,7 +64,7 @@ public class ComplexZipConverter { * Default class logger. */ private static final Logger logger = LogManager.getLogger(); - private static final String IMMEDIATE_LINK_PREFIX = "IMMEDIATE_LINK:"; + protected static final String IMMEDIATE_LINK_PREFIX = "IMMEDIATE_LINK:"; /** * Class used to create single submap from a file. diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java index b42db99a4bf4325e344cd1837b988942e64904b2..b5f450031f4f9d21313458eba8b0fdb377bc8c4e 100644 --- a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java +++ b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java @@ -8,6 +8,8 @@ import lcsb.mapviewer.converter.zip.LayoutZipEntryFile; import lcsb.mapviewer.converter.zip.ZipEntryFile; import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.map.InconsistentModelException; +import lcsb.mapviewer.model.map.compartment.Compartment; +import lcsb.mapviewer.model.map.compartment.SquareCompartment; import lcsb.mapviewer.model.map.layout.graphics.Glyph; import lcsb.mapviewer.model.map.layout.graphics.Layer; import lcsb.mapviewer.model.map.layout.graphics.LayerText; @@ -221,6 +223,14 @@ public class ProjectFactory { reaction.addProduct(new Product(targetElement)); mapping.addReaction(reaction); } + if (parentElement.getImmediateLink() != null) { + Compartment mappingParentCompartment = getCompartmentForConnection(parentModel.getName(), mapping); + + Species sourceElement = getCompartmentChildForConnection(parentElement.getElementId(), mappingParentCompartment); + String notes = sourceElement.getNotes(); + notes += ComplexZipConverter.IMMEDIATE_LINK_PREFIX + parentElement.getImmediateLink() + "\n"; + sourceElement.setNotes(notes); + } } } try { @@ -248,6 +258,23 @@ public class ProjectFactory { return sourceElement; } + private Species getCompartmentChildForConnection(final String elementId, final Compartment mappingParentElement) { + Species sourceElement = null; + for (Element child : mappingParentElement.getElements()) { + if (child instanceof Species && child.getName().equals(elementId)) { + sourceElement = (Species) child; + } + } + + if (sourceElement == null) { + sourceElement = new GenericProtein("sa" + idCounter++); + sourceElement.setName(elementId); + mappingParentElement.addElement(sourceElement); + mappingParentElement.getModel().addElement(sourceElement); + } + return sourceElement; + } + private Complex getComplexForConnection(final String modelName, final Model mapping) { List<Element> mappingParentElements = mapping.getElementsByName(modelName); @@ -264,4 +291,21 @@ public class ProjectFactory { } return mappingParentElement; } + + private Compartment getCompartmentForConnection(final String modelName, final Model mapping) { + List<Element> mappingParentElements = mapping.getElementsByName(modelName); + + Compartment mappingParentElement = null; + for (Element mappingElement : mappingParentElements) { + if (mappingElement instanceof Compartment) { + mappingParentElement = (Compartment) mappingElement; + } + } + if (mappingParentElement == null) { + mappingParentElement = new SquareCompartment("ca" + idCounter++); + mappingParentElement.setName(modelName); + mapping.addElement(mappingParentElement); + } + return mappingParentElement; + } }