From faf3fc3e79fa938d024dc4653cee345239fb560f Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Mon, 17 Aug 2020 09:02:45 +0200 Subject: [PATCH 1/9] data model contain border coordinates for text label in Element --- .../alias/CompartmentAliasXmlParser.java | 20 ++-- .../alias/ComplexAliasXmlParser.java | 6 +- .../alias/SpeciesAliasXmlParser.java | 5 +- .../CellDesignerTestFunctions.java | 45 +++++---- .../alias/AliasCollectionXmlParserTest.java | 7 +- .../alias/CompartmentAliasXmlParserTest.java | 27 +++--- .../alias/ComplexAliasXmlParserTest.java | 5 +- .../alias/SpeciesAliasXmlParserTest.java | 5 +- .../annotation/RestAnnotationParserTest.java | 1 - .../compartment/CompartmentParserTests.java | 6 +- .../compartment/CompartmentXmlParserTest.java | 1 - .../types/ModifierTypeUtilsTest.java | 6 +- .../model/sbgnml/SbgnmlXmlParser.java | 33 +++++-- .../model/sbgnml/SbgnmlXmlParserTest.java | 10 +- .../compartment/CompartmentConverter.java | 14 +-- .../PathwayCompartmentConverter.java | 7 +- .../element/species/SpeciesConverter.java | 27 +++--- .../graphics/GraphicsTestFunctions.java | 51 ++++------ .../species/SpeciesGenericConverterTests.java | 10 +- .../model/sbml/SbmlElementExporter.java | 12 +-- .../model/sbml/SbmlElementParser.java | 15 +-- .../compartment/SbmlCompartmentParser.java | 10 +- .../model/sbml/species/SbmlSpeciesParser.java | 14 ++- .../model/sbml/GenericSbmlParserTest.java | 10 +- .../model/sbml/SbmlExporterTest.java | 8 +- .../model/sbml/SbmlTestFunctions.java | 32 ++++--- .../SbmlCompartmentParserTest.java | 5 +- .../reaction/SbmlReactionExportArrowType.java | 7 +- .../commands/CreateHierarchyCommand.java | 13 ++- .../lcsb/mapviewer/commands/MoveCommand.java | 3 +- .../commands/MoveElementsCommand.java | 9 +- .../layout/ApplySimpleLayoutModelCommand.java | 10 +- .../commands/CommandTestFunctions.java | 28 +++++- .../mapviewer/commands/MoveCommandTest.java | 13 +-- .../ApplySimpleLayoutModelCommandTest.java | 5 +- .../map/compartment/PathwayCompartment.java | 3 +- .../mapviewer/model/map/species/Element.java | 93 ++++++++++++------- .../model/map/species/ElementComparator.java | 27 ++++-- .../CompartmentComparatorTest.java | 58 +++++++++--- .../map/compartment/CompartmentTest.java | 7 +- .../wikipathway/XML/ModelContructor.java | 79 ++++++++-------- .../wikipathway/GPMLToModelTest.java | 3 +- .../WikipathwaysTestFunctions.java | 36 +++++-- .../wikipathway/XML/ModelContructorTest.java | 11 +-- .../wikipathway/XML/ModelToGPMLTest.java | 47 ++-------- .../V15.1.0.20200814__label_border.sql | 50 ++++++++++ .../persist/ObjectValidatorTest.java | 15 ++- .../persist/PersistTestFunctions.java | 57 +++--------- .../comments/CommentRestImplTest.java | 2 - .../services/interfaces/ICommentService.java | 1 - .../services/impl/SearchServiceTest.java | 4 - .../web/ControllerIntegrationTest.java | 34 ++++--- ...llerIntegrationTestWithoutTransaction.java | 5 +- 53 files changed, 572 insertions(+), 440 deletions(-) create mode 100644 persist/src/main/resources/db/migration/15.1.0~beta.1/V15.1.0.20200814__label_border.sql diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParser.java index cbd1fb569..dd133652a 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParser.java @@ -162,7 +162,11 @@ public class CompartmentAliasXmlParser extends AbstractAliasXmlParser\n"); + sb.append("x=\"" + compartment.getNameX() + "\" "); + sb.append("y=\"" + compartment.getNameY() + "\"/>\n"); sb.append(getDoubleLineNode(compartment)); diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/ComplexAliasXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/ComplexAliasXmlParser.java index d691bb886..1b51b33a1 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/ComplexAliasXmlParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/ComplexAliasXmlParser.java @@ -1,6 +1,5 @@ package lcsb.mapviewer.converter.model.celldesigner.alias; -import java.awt.geom.Point2D; import java.util.HashMap; import java.util.Map; @@ -176,7 +175,10 @@ public class ComplexAliasXmlParser extends AbstractAliasXmlParser { } complexAliasesMapById.put(result.getElementId(), result); species.updateModelElementAfterLayoutAdded(result); - result.setNamePoint(new Point2D.Double(result.getCenterX(), result.getY() + result.getHeight() - 2)); + result.setNameX(result.getX()); + result.setNameY(result.getY()); + result.setNameWidth(result.getWidth()); + result.setNameHeight(result.getHeight()); result.setNameHorizontalAlign(HorizontalAlign.CENTER); result.setNameVerticalAlign(VerticalAlign.BOTTOM); return result; diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/SpeciesAliasXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/SpeciesAliasXmlParser.java index 42030d57c..4eabd443b 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/SpeciesAliasXmlParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/SpeciesAliasXmlParser.java @@ -156,7 +156,10 @@ public class SpeciesAliasXmlParser extends AbstractAliasXmlParser { } species.updateModelElementAfterLayoutAdded(result); - result.setNamePoint(result.getCenter()); + result.setNameX(result.getX()); + result.setNameY(result.getY()); + result.setNameWidth(result.getWidth()); + result.setNameHeight(result.getHeight()); result.setNameHorizontalAlign(HorizontalAlign.CENTER); result.setNameVerticalAlign(VerticalAlign.MIDDLE); return result; diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerTestFunctions.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerTestFunctions.java index 007260285..91bb381c8 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerTestFunctions.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerTestFunctions.java @@ -227,10 +227,10 @@ public abstract class CellDesignerTestFunctions { Model model2 = serializeModel(model); ModelComparator comparator = new ModelComparator(); - - //import of unbounded compartments is problematic - for (Compartment compartment :model.getCompartments()) { - if (compartment instanceof BottomSquareCompartment || + + // import of unbounded compartments is problematic + for (Compartment compartment : model.getCompartments()) { + if (compartment instanceof BottomSquareCompartment || compartment instanceof TopSquareCompartment || compartment instanceof LeftSquareCompartment || compartment instanceof RightSquareCompartment) { @@ -261,26 +261,39 @@ public abstract class CellDesignerTestFunctions { GenericProtein protein = new GenericProtein("id" + (idCounter++)); protein.setActivity(true); protein.setFontSize(4); - protein.setHeight(10); - protein.setWidth(20); - protein.setX(30); - protein.setY(40); protein.setStateLabel("xxx"); protein.setStatePrefix("yyy"); - protein.setNamePoint(protein.getCenter()); - protein.setNameHorizontalAlign(HorizontalAlign.CENTER); - protein.setNameVerticalAlign(VerticalAlign.MIDDLE); + + assignCoordinates(30, 40, 10, 20, protein); + return protein; } protected SimpleMolecule createSimpleMolecule() { SimpleMolecule result = new SimpleMolecule("id" + (idCounter++)); - result.setX(50); - result.setY(60); - result.setNamePoint(result.getCenter()); - result.setNameHorizontalAlign(HorizontalAlign.CENTER); - result.setNameVerticalAlign(VerticalAlign.MIDDLE); + assignCoordinates(50, 60, 20, 20, result); return result; } + static int zIndex = 10; + + protected static void assignCoordinates(lcsb.mapviewer.model.map.species.Element element) { + assignCoordinates(10, 20, 30, 40, element); + } + + protected static void assignCoordinates(double x, double y, double width, double height, + lcsb.mapviewer.model.map.species.Element element) { + element.setX(x); + element.setY(y); + element.setZ(zIndex++); + element.setWidth(width); + element.setHeight(height); + element.setNameX(x); + element.setNameY(y); + element.setNameWidth(width); + element.setNameHeight(height); + element.setNameVerticalAlign(VerticalAlign.MIDDLE); + element.setNameHorizontalAlign(HorizontalAlign.CENTER); + } + } diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/AliasCollectionXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/AliasCollectionXmlParserTest.java index ef0016b17..fbb05d4a4 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/AliasCollectionXmlParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/AliasCollectionXmlParserTest.java @@ -2,7 +2,6 @@ package lcsb.mapviewer.converter.model.celldesigner.alias; import static org.junit.Assert.*; -import java.awt.geom.Point2D; import java.util.ArrayList; import java.util.List; @@ -285,11 +284,7 @@ public class AliasCollectionXmlParserTest extends CellDesignerTestFunctions { private Compartment createCompartment(String id) { Compartment compartment = new SquareCompartment(id); compartment.setName("name" + id); - compartment.setX(13); - compartment.setY(14); - compartment.setWidth(100); - compartment.setHeight(120); - compartment.setNamePoint(new Point2D.Double(0, 1)); + assignCoordinates(13, 14, 100, 120, compartment); return compartment; } diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParserTest.java index 5d7a2abbc..5ed950ef6 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParserTest.java @@ -2,8 +2,6 @@ package lcsb.mapviewer.converter.model.celldesigner.alias; import static org.junit.Assert.*; -import java.awt.geom.Point2D; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.*; @@ -54,8 +52,10 @@ public class CompartmentAliasXmlParserTest extends CellDesignerTestFunctions { assertEquals(compartment.getWidth(), alias2.getWidth(), 1e-6); assertEquals(compartment.getX(), alias2.getX(), 1e-6); assertEquals(compartment.getY(), alias2.getY(), 1e-6); - assertEquals(compartment.getNamePoint().getX(), alias2.getNamePoint().getX(), 1e-6); - assertEquals(compartment.getNamePoint().getY(), alias2.getNamePoint().getY(), 1e-6); + assertEquals(compartment.getNameX(), alias2.getNameX(), 1e-6); + assertEquals(compartment.getNameY(), alias2.getNameY(), 1e-6); + assertEquals(compartment.getNameWidth(), alias2.getNameWidth(), 1e-6); + assertEquals(compartment.getNameHeight(), alias2.getNameHeight(), 1e-6); assertNotNull(alias2.getNameHorizontalAlign()); assertNotNull(alias2.getNameVerticalAlign()); } @@ -63,11 +63,7 @@ public class CompartmentAliasXmlParserTest extends CellDesignerTestFunctions { private Compartment createCompartment() { Compartment compartment = new SquareCompartment("comp_id"); compartment.setName("name"); - compartment.setX(13); - compartment.setY(14); - compartment.setWidth(100); - compartment.setHeight(120); - compartment.setNamePoint(new Point2D.Double(0, 1)); + assignCoordinates(13, 14, 100, 120, compartment); return compartment; } @@ -127,8 +123,9 @@ public class CompartmentAliasXmlParserTest extends CellDesignerTestFunctions { assertEquals(139.0, alias.getX(), 1e-6); assertEquals(55.0, alias.getY(), 1e-6); assertEquals(522.0, alias.getWidth(), 1e-6); - assertEquals(392.5, alias.getNamePoint().getX(), 1e-6); - assertEquals(196.5, alias.getNamePoint().getY(), 1e-6); + assertEquals(392.5, alias.getNameX(), 1e-6); + assertEquals(196.5, alias.getNameY(), 1e-6); + assertEquals(522.0, alias.getNameWidth(), 1e-6); assertEquals(0xffcccc00, alias.getFillColor().getRGB()); } @@ -142,7 +139,7 @@ public class CompartmentAliasXmlParserTest extends CellDesignerTestFunctions { @Test public void testLeftToXml() throws Exception { Compartment alias = new LeftSquareCompartment("id"); - alias.setNamePoint(new Point2D.Double()); + assignCoordinates(alias); String xml = parser.toXml(alias); assertNotNull(xml); } @@ -150,7 +147,7 @@ public class CompartmentAliasXmlParserTest extends CellDesignerTestFunctions { @Test public void testRightToXml() throws Exception { Compartment alias = new RightSquareCompartment("id"); - alias.setNamePoint(new Point2D.Double()); + assignCoordinates(alias); String xml = parser.toXml(alias); assertNotNull(xml); } @@ -158,7 +155,7 @@ public class CompartmentAliasXmlParserTest extends CellDesignerTestFunctions { @Test public void testTopToXml() throws Exception { Compartment alias = new TopSquareCompartment("id"); - alias.setNamePoint(new Point2D.Double()); + assignCoordinates(alias); String xml = parser.toXml(alias); assertNotNull(xml); } @@ -166,7 +163,7 @@ public class CompartmentAliasXmlParserTest extends CellDesignerTestFunctions { @Test public void testBotttomToXml() throws Exception { Compartment alias = new BottomSquareCompartment("id"); - alias.setNamePoint(new Point2D.Double()); + assignCoordinates(alias); String xml = parser.toXml(alias); assertNotNull(xml); } diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/ComplexAliasXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/ComplexAliasXmlParserTest.java index a2bc81474..19ce423b8 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/ComplexAliasXmlParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/ComplexAliasXmlParserTest.java @@ -73,7 +73,10 @@ public class ComplexAliasXmlParserTest extends CellDesignerTestFunctions { assertEquals(100.0, alias.getWidth(), Configuration.EPSILON); assertEquals(744.0, alias.getX(), Configuration.EPSILON); assertEquals(0.0, alias.getY(), Configuration.EPSILON); - assertNotNull(alias.getNamePoint()); + assertNotNull(alias.getNameX()); + assertNotNull(alias.getNameY()); + assertNotNull(alias.getNameWidth()); + assertNotNull(alias.getNameHeight()); assertNotNull(alias.getNameHorizontalAlign()); assertNotNull(alias.getNameVerticalAlign()); } diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/SpeciesAliasXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/SpeciesAliasXmlParserTest.java index 907ab019a..c8209fe24 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/SpeciesAliasXmlParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/alias/SpeciesAliasXmlParserTest.java @@ -67,7 +67,10 @@ public class SpeciesAliasXmlParserTest extends CellDesignerTestFunctions { assertEquals(11813.0, alias.getX(), 1e-6); assertEquals(2840.5, alias.getY(), 1e-6); assertEquals("ca1", alias.getCompartment().getElementId()); - assertNotNull(alias.getNamePoint()); + assertNotNull(alias.getNameX()); + assertNotNull(alias.getNameY()); + assertNotNull(alias.getNameWidth()); + assertNotNull(alias.getNameHeight()); assertNotNull(alias.getNameHorizontalAlign()); assertNotNull(alias.getNameVerticalAlign()); } diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java index 27b980166..6e8d56df5 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java @@ -19,7 +19,6 @@ import lcsb.mapviewer.common.exception.NotImplementedException; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerTestFunctions; import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerElement; import lcsb.mapviewer.model.map.*; -import lcsb.mapviewer.model.map.layout.graphics.LayerText; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.reaction.Reaction; import lcsb.mapviewer.model.map.species.*; diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentParserTests.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentParserTests.java index 094da869a..70c3024a3 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentParserTests.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentParserTests.java @@ -2,8 +2,6 @@ package lcsb.mapviewer.converter.model.celldesigner.compartment; import static org.junit.Assert.*; -import java.awt.geom.Point2D; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.*; @@ -137,7 +135,7 @@ public class CompartmentParserTests extends CellDesignerTestFunctions { Model model = new ModelFullIndexed(null); Compartment compartment = new SquareCompartment("c"); compartment.setName("xyz"); - compartment.setNamePoint(new Point2D.Double()); + assignCoordinates(compartment); model.addElement(compartment); Model model2 = super.serializeModel(model); @@ -148,7 +146,7 @@ public class CompartmentParserTests extends CellDesignerTestFunctions { public void testToXmlWithCompartmentIdNotRecognizedByCellDesignerAndChildren() throws Exception { Model model = new ModelFullIndexed(null); Compartment compartment = new SquareCompartment("c"); - compartment.setNamePoint(new Point2D.Double()); + assignCoordinates(compartment); compartment.setName("xyz"); model.addElement(compartment); diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentXmlParserTest.java index 74858bedc..b9d973a1a 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentXmlParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentXmlParserTest.java @@ -17,7 +17,6 @@ import org.xml.sax.InputSource; import lcsb.mapviewer.common.Pair; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerElementCollection; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerTestFunctions; -import lcsb.mapviewer.converter.model.celldesigner.species.ProteinXmlParserTest; import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerCompartment; import lcsb.mapviewer.model.map.compartment.Compartment; diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/types/ModifierTypeUtilsTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/types/ModifierTypeUtilsTest.java index 9fdb85552..0f703c3da 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/types/ModifierTypeUtilsTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/types/ModifierTypeUtilsTest.java @@ -3,18 +3,14 @@ package lcsb.mapviewer.converter.model.celldesigner.types; import static org.junit.Assert.*; import java.awt.geom.Point2D; -import java.lang.reflect.Field; import org.junit.*; import org.mockito.Mockito; -import lcsb.mapviewer.common.exception.*; +import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerTestFunctions; -import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerElement; import lcsb.mapviewer.model.graphics.PolylineData; import lcsb.mapviewer.model.map.reaction.*; -import lcsb.mapviewer.model.map.species.GenericProtein; -import lcsb.mapviewer.model.map.species.Species; public class ModifierTypeUtilsTest extends CellDesignerTestFunctions { diff --git a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java index 42f0eee97..d25d8b28e 100644 --- a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java +++ b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java @@ -761,9 +761,10 @@ public class SbgnmlXmlParser { if (g.getLabel() != null) { newSpecies.setName(g.getLabel().getText()); if (g.getLabel().getBbox() != null) { - double x = g.getLabel().getBbox().getX() + g.getLabel().getBbox().getW() / 2; - double y = g.getLabel().getBbox().getY() + g.getLabel().getBbox().getH() / 2; - newSpecies.setNamePoint(x, y); + newSpecies.setNameX(g.getLabel().getBbox().getX()); + newSpecies.setNameY(g.getLabel().getBbox().getY()); + newSpecies.setNameWidth(g.getLabel().getBbox().getW()); + newSpecies.setNameHeight(g.getLabel().getBbox().getH()); newSpecies.setNameHorizontalAlign(HorizontalAlign.CENTER); newSpecies.setNameVerticalAlign(VerticalAlign.MIDDLE); } @@ -918,13 +919,16 @@ public class SbgnmlXmlParser { species.setWidth(new Double(glyph.getBbox().getW())); species.setX(new Double(glyph.getBbox().getX())); species.setY(new Double(glyph.getBbox().getY())); - if (species.getNamePoint() == null) { + if (species.getNameX() == null || species.getNameY() == null) { + species.setNameX(species.getX()); + species.setNameY(species.getY()); + species.setNameWidth(species.getWidth()); species.setNameHorizontalAlign(HorizontalAlign.CENTER); if (species instanceof Complex) { - species.setNamePoint(new Point2D.Double(species.getCenterX(), species.getY() + species.getHeight() - 2)); species.setNameVerticalAlign(VerticalAlign.BOTTOM); + species.setNameHeight(species.getHeight() - 2); } else { - species.setNamePoint(species.getCenter()); + species.setNameHeight(species.getHeight()); species.setNameVerticalAlign(VerticalAlign.MIDDLE); } } @@ -1067,7 +1071,10 @@ public class SbgnmlXmlParser { nullParent.setHeight(Double.MAX_VALUE); nullParent.setX(0.0); nullParent.setY(0.0); - nullParent.setNamePoint(new Point2D.Double(10, 10)); + nullParent.setNameX(10); + nullParent.setNameY(10); + nullParent.setNameWidth(Double.MAX_VALUE); + nullParent.setNameHeight(Double.MAX_VALUE); nullParent.setNameHorizontalAlign(HorizontalAlign.LEFT); nullParent.setNameVerticalAlign(VerticalAlign.TOP); Compartment parent = nullParent; @@ -1986,12 +1993,18 @@ public class SbgnmlXmlParser { compartment.setBorderColor(COMPARTMENT_COLOR); if (glyph.getLabel() != null && glyph.getLabel().getBbox() != null) { - compartment.setNamePoint(glyph.getLabel().getBbox().getX(), glyph.getLabel().getBbox().getY()); + compartment.setNameX(glyph.getLabel().getBbox().getX()); + compartment.setNameY(glyph.getLabel().getBbox().getY()); + compartment.setNameWidth(glyph.getLabel().getBbox().getW()); + compartment.setNameHeight(glyph.getLabel().getBbox().getH()); compartment.setNameHorizontalAlign(HorizontalAlign.LEFT); compartment.setNameVerticalAlign(VerticalAlign.TOP); } else { - compartment.setNamePoint(compartment.getX() + compartment.getThickness() + CONTAINER_NAME_MARGIN, - compartment.getY() + compartment.getThickness() + CONTAINER_NAME_MARGIN); + compartment.setNameX(compartment.getX() + compartment.getThickness() + CONTAINER_NAME_MARGIN); + compartment.setNameY(compartment.getY() + compartment.getThickness() + CONTAINER_NAME_MARGIN); + compartment.setNameWidth(compartment.getWidth() - 2 * (compartment.getThickness() + CONTAINER_NAME_MARGIN)); + compartment.setNameHeight(compartment.getHeight() - 2 * (compartment.getThickness() + CONTAINER_NAME_MARGIN)); + compartment.setNameHorizontalAlign(HorizontalAlign.LEFT); compartment.setNameVerticalAlign(VerticalAlign.TOP); } diff --git a/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParserTest.java b/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParserTest.java index 3c7befe6f..ca704672f 100644 --- a/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParserTest.java +++ b/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParserTest.java @@ -95,12 +95,18 @@ public class SbgnmlXmlParserTest extends SbgnmlTestFunctions { model2.setNotes(model.getNotes()); for (Element element : model.getElements()) { - element.setNamePoint(null); + element.setNameX(0); + element.setNameY(0); + element.setNameWidth(0); + element.setNameHeight(0); element.setNameHorizontalAlign(null); element.setNameVerticalAlign(null); } for (Element element : model2.getElements()) { - element.setNamePoint(null); + element.setNameX(0); + element.setNameY(0); + element.setNameWidth(0); + element.setNameHeight(0); element.setNameHorizontalAlign(null); element.setNameVerticalAlign(null); } diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/CompartmentConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/CompartmentConverter.java index 43e785460..dbc4f367d 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/CompartmentConverter.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/CompartmentConverter.java @@ -1,7 +1,8 @@ package lcsb.mapviewer.converter.graphics.bioEntity.element.compartment; import java.awt.*; -import java.awt.geom.*; +import java.awt.geom.Area; +import java.awt.geom.Rectangle2D; import java.util.List; import org.apache.logging.log4j.LogManager; @@ -154,10 +155,10 @@ public abstract class CompartmentConverter extends Elemen // draw description if (fill) { - Point2D tmpPoint = compartment.getNamePoint(); - compartment.setNamePoint(compartment.getCenter()); + Rectangle2D tmpBorder = compartment.getNameBorder(); + compartment.setNameBorder(compartment.getBorder()); drawText(compartment, graphics, params); - compartment.setNamePoint(tmpPoint); + compartment.setNameBorder(tmpBorder); } } @@ -223,9 +224,8 @@ public abstract class CompartmentConverter extends Elemen } } else { border = new Rectangle2D.Double( - compartment.getNamePoint().getX(), compartment.getNamePoint().getY(), - compartment.getWidth() - (compartment.getNamePoint().getX() - compartment.getX()), - compartment.getHeight() - (compartment.getNamePoint().getY() - compartment.getY())); + compartment.getNameX(), compartment.getNameY(), + compartment.getNameWidth(), compartment.getNameHeight()); } double fontSize = compartment.getFontSize() * params.getScale(); diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/PathwayCompartmentConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/PathwayCompartmentConverter.java index f09140b58..95f9e78df 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/PathwayCompartmentConverter.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/PathwayCompartmentConverter.java @@ -1,7 +1,6 @@ package lcsb.mapviewer.converter.graphics.bioEntity.element.compartment; import java.awt.*; -import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import lcsb.mapviewer.commands.ColorExtractor; @@ -61,10 +60,10 @@ public class PathwayCompartmentConverter extends CompartmentConverter extends ElementConvert * the text is given as a point. Both parameters centered described if text * should be automatically centered horizontally and vertically. * - * @param point + * @param border * where the text should be drawn * @param text * text to draw @@ -218,37 +218,38 @@ public abstract class SpeciesConverter extends ElementConvert * @param verticalCentered * should the text be vertically centered */ - protected void drawText(final Point2D point, final String text, final Graphics2D graphics, + protected void drawText(final Rectangle2D border, final String text, final Graphics2D graphics, HorizontalAlign horizontalAlign, VerticalAlign verticalAlign) { double height = getTextHeight(text, graphics); - double x = point.getX(); - double y = point.getY(); + double y = border.getY(); String[] lines = text.split("\n"); double lineHeight = graphics.getFontMetrics().getHeight(); switch (verticalAlign) { case TOP: + y = border.getMinY(); break; case MIDDLE: - y -= height / 2 - graphics.getFontMetrics().getAscent(); + y = border.getCenterY() - (height / 2 - graphics.getFontMetrics().getAscent()); break; case BOTTOM: - y -= height - graphics.getFontMetrics().getAscent(); + y = border.getMaxY() - (height - graphics.getFontMetrics().getAscent()); break; default: throw new InvalidArgumentException("Don't know how to align text with: " + verticalAlign); } for (String string : lines) { - double currX = x; + double currX; switch (horizontalAlign) { case LEFT: + currX = border.getX(); break; case CENTER: - currX -= getTextWidth(string, graphics) / 2; + currX = border.getCenterX() - getTextWidth(string, graphics) / 2; break; case RIGTH: - currX -= getTextWidth(string, graphics); + currX = border.getMaxX() - getTextWidth(string, graphics); default: throw new InvalidArgumentException("Don't know how to align text with: " + horizontalAlign); @@ -454,7 +455,7 @@ public abstract class SpeciesConverter extends ElementConvert graphics.setColor(species.getFontColor()); graphics.setFont(font); - Point2D point = species.getNamePoint(); + Rectangle2D point = species.getNameBorder(); drawText(point, text, graphics, species.getNameHorizontalAlign(), species.getNameVerticalAlign()); graphics.setFont(oldFont); graphics.setColor(oldColor); @@ -645,9 +646,9 @@ public abstract class SpeciesConverter extends ElementConvert y = transcriptionSite.getPosition().getY() - DEFAULT_MODIFICATION_DIAMETER - DEFAULT_SPECIES_FONT_SIZE / 2; if (transcriptionSite.getName() != null && !transcriptionSite.getName().isEmpty()) { - Point2D centerTextPoint = new Point2D.Double( - transcriptionSite.getPosition().getX() + transcriptionSite.getWidth() / 2, y); - drawText(centerTextPoint, transcriptionSite.getName(), graphics, HorizontalAlign.CENTER, VerticalAlign.TOP); + Rectangle2D border = new Rectangle2D.Double(transcriptionSite.getPosition().getX(), y, + transcriptionSite.getWidth(), transcriptionSite.getHeight()); + drawText(border, transcriptionSite.getName(), graphics, HorizontalAlign.CENTER, VerticalAlign.TOP); } } diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/GraphicsTestFunctions.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/GraphicsTestFunctions.java index fdc4e56be..deb8d0c9f 100644 --- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/GraphicsTestFunctions.java +++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/GraphicsTestFunctions.java @@ -26,7 +26,7 @@ public abstract class GraphicsTestFunctions { @Rule public UnitTestFailedWatcher unitTestFailedWatcher = new UnitTestFailedWatcher(); - int elementCounter = 1; + static int elementCounter = 1; protected Graphics2D createGraphicsMock() { Graphics2D graphics = Mockito.mock(Graphics2D.class); @@ -64,17 +64,24 @@ public abstract class GraphicsTestFunctions { protected GenericProtein createProtein() { GenericProtein result = new GenericProtein("s" + elementCounter++); - result.setZ(elementCounter); - result.setX(10); - result.setY(10); - result.setWidth(10); - result.setHeight(10); - result.setNamePoint(result.getCenter()); - result.setNameHorizontalAlign(HorizontalAlign.CENTER); - result.setNameVerticalAlign(VerticalAlign.MIDDLE); + assignCoordinates(10, 10, 10, 10, result); return result; } + protected static void assignCoordinates(double x, double y, double width, double height, Element element) { + element.setX(x); + element.setY(y); + element.setZ(elementCounter); + element.setWidth(width); + element.setHeight(height); + element.setNameX(x); + element.setNameY(y); + element.setNameWidth(width); + element.setNameHeight(height); + element.setNameVerticalAlign(VerticalAlign.MIDDLE); + element.setNameHorizontalAlign(HorizontalAlign.CENTER); + } + protected Complex createComplex() { Complex complex = new Complex("c" + elementCounter++); complex.setName("a"); @@ -96,15 +103,7 @@ public abstract class GraphicsTestFunctions { protected SimpleMolecule createSimpleMolecule() { SimpleMolecule protein = new SimpleMolecule("sm" + elementCounter++); - protein.setX(10); - protein.setY(20); - protein.setWidth(100); - protein.setHeight(80); - protein.setFillColor(Color.WHITE); - - protein.setNamePoint(protein.getCenter()); - protein.setNameHorizontalAlign(HorizontalAlign.CENTER); - protein.setNameVerticalAlign(VerticalAlign.MIDDLE); + assignCoordinates(10, 10, 100, 80, protein); return protein; } @@ -121,26 +120,14 @@ public abstract class GraphicsTestFunctions { protected SquareCompartment createSquareCompartment() { SquareCompartment compartment = new SquareCompartment("id"); - compartment.setX(10); - compartment.setY(10); - compartment.setWidth(100); - compartment.setHeight(200); - compartment.setNamePoint(compartment.getCenter()); - compartment.setNameHorizontalAlign(HorizontalAlign.CENTER); - compartment.setNameVerticalAlign(VerticalAlign.MIDDLE); + assignCoordinates(10, 10, 100, 200, compartment); return compartment; } protected PathwayCompartment createPathway() { PathwayCompartment pathway = new PathwayCompartment("id"); - pathway.setX(10); - pathway.setY(10); - pathway.setWidth(100); - pathway.setHeight(200); - pathway.setNamePoint(pathway.getCenter()); - pathway.setNameHorizontalAlign(HorizontalAlign.CENTER); - pathway.setNameVerticalAlign(VerticalAlign.MIDDLE); + assignCoordinates(10, 10, 100, 200, pathway); return pathway; } diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesGenericConverterTests.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesGenericConverterTests.java index 83ce09964..c4482d1d5 100644 --- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesGenericConverterTests.java +++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesGenericConverterTests.java @@ -24,8 +24,6 @@ import lcsb.mapviewer.converter.graphics.ConverterParams; import lcsb.mapviewer.converter.graphics.GraphicsTestFunctions; import lcsb.mapviewer.converter.graphics.bioEntity.BioEntityConverter; import lcsb.mapviewer.converter.graphics.bioEntity.BioEntityConverterImpl; -import lcsb.mapviewer.model.graphics.HorizontalAlign; -import lcsb.mapviewer.model.graphics.VerticalAlign; import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelFullIndexed; @@ -65,18 +63,12 @@ public class SpeciesGenericConverterTests extends GraphicsTestFunctions { } private static Element assignData(Element element) { - element.setX(10); - element.setY(10); - element.setWidth(100); - element.setHeight(200); + assignCoordinates(10,10,100,200, element); element.setFillColor(Color.BLUE); element.setBorderColor(Color.YELLOW); element.setFontColor(Color.GREEN); element.setName("xyz"); element.setTransparencyLevel("100"); - element.setNamePoint(element.getCenter()); - element.setNameHorizontalAlign(HorizontalAlign.CENTER); - element.setNameVerticalAlign(VerticalAlign.MIDDLE); return element; } diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementExporter.java index fa1a8058a..56b32122c 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementExporter.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementExporter.java @@ -44,10 +44,10 @@ public abstract class SbmlElementExporter extends for (TextGlyph textGlyph : getTextGlyphsByLayoutElementId(idGlyphPair.getRight())) { if (textGlyph.getBoundingBox() != null) { BoundingBox box = textGlyph.getBoundingBox(); - double x = box.getPosition().getX(); - double y = box.getPosition().getY(); + source.setNameX(box.getPosition().getX()); + source.setNameY(box.getPosition().getY()); + source.setNameWidth(box.getDimensions().getWidth()); + source.setNameHeight(box.getDimensions().getHeight()); source.setNameHorizontalAlign(HorizontalAlign.LEFT); source.setNameVerticalAlign(VerticalAlign.TOP); LocalStyle style = getStyleForGlyph(textGlyph); if (style != null) { RenderGroup group = style.getGroup(); + if (group.isSetVTextAnchor()) { switch (group.getVTextAnchor()) { case BOTTOM: source.setNameVerticalAlign(VerticalAlign.BOTTOM); - y = box.getPosition().getY() + box.getDimensions().getHeight(); break; case MIDDLE: source.setNameVerticalAlign(VerticalAlign.MIDDLE); - y = box.getPosition().getY() + box.getDimensions().getHeight() / 2; break; case TOP: source.setNameVerticalAlign(VerticalAlign.TOP); - y = box.getPosition().getY(); break; default: logger.warn(new LogMarker(ProjectLogEntryType.PARSING_ISSUE, source), @@ -141,15 +140,12 @@ public abstract class SbmlElementParser extends switch (group.getTextAnchor()) { case START: source.setNameHorizontalAlign(HorizontalAlign.LEFT); - x = box.getPosition().getX(); break; case MIDDLE: source.setNameHorizontalAlign(HorizontalAlign.CENTER); - x = box.getPosition().getX() + box.getDimensions().getWidth() / 2; break; case END: source.setNameHorizontalAlign(HorizontalAlign.RIGTH); - x = box.getPosition().getX() + box.getDimensions().getWidth(); break; default: logger.warn(new LogMarker(ProjectLogEntryType.PARSING_ISSUE, source), @@ -161,7 +157,6 @@ public abstract class SbmlElementParser extends source.setFontColor(fontColor); } } - source.setNamePoint(new Point2D.Double(x, y)); if (textGlyph.isSetText() && textGlyph.getText() != null && !textGlyph.getText().isEmpty()) { String name = textGlyph.getText(); if (!name.equals(source.getName())) { diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentParser.java index 6f2186d20..500a9bd95 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentParser.java @@ -46,9 +46,13 @@ public class SbmlCompartmentParser extends SbmlElementParser assignModificationResiduesLayout(element); assignStructuralStateLayout(element); - if (element.getNamePoint() == null) { - element.setNamePoint(element.getCenter()); + if (element.getNameX() == null) { + element.setNameX(element.getX()); + } + if (element.getNameY() == null) { + element.setNameY(element.getY()); + } + if (element.getNameWidth() == null) { + element.setNameWidth(element.getWidth() - (element.getNameX() - element.getX())); + element.setNameHeight(element.getHeight() - (element.getNameY() - element.getY())); + } + if (element.getNameX() == null) { + element.setNameX(element.getX()); } if (element.getNameHorizontalAlign() == null) { element.setNameHorizontalAlign(HorizontalAlign.CENTER); diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlParserTest.java index a11840ff3..74844cb25 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlParserTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlParserTest.java @@ -93,12 +93,18 @@ public class GenericSbmlParserTest extends SbmlTestFunctions { bioEntity.setZ(null); } for (Element bioEntity : model.getElements()) { - bioEntity.setNamePoint(null); + bioEntity.setNameX(0); + bioEntity.setNameY(0); + bioEntity.setNameWidth(0); + bioEntity.setNameHeight(0); bioEntity.setNameHorizontalAlign(null); bioEntity.setNameVerticalAlign(null); } for (Element bioEntity : model2.getElements()) { - bioEntity.setNamePoint(null); + bioEntity.setNameX(0); + bioEntity.setNameY(0); + bioEntity.setNameWidth(0); + bioEntity.setNameHeight(0); bioEntity.setNameHorizontalAlign(null); bioEntity.setNameVerticalAlign(null); } diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlExporterTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlExporterTest.java index 41131f8a7..75f2c1d00 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlExporterTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlExporterTest.java @@ -290,14 +290,8 @@ public class SbmlExporterTest extends SbmlTestFunctions { Model model = createEmptyModel(); Element element = class1.getConstructor(String.class).newInstance("x"); element.setName("test name"); - element.setX(10); - element.setWidth(10); - element.setY(10); - element.setHeight(10); - element.setNamePoint(element.getCenter()); - element.setNameHorizontalAlign(HorizontalAlign.CENTER); + assignCoordinates(10, 10, 10, 10, element); element.setNameVerticalAlign(VerticalAlign.BOTTOM); - element.setZ(127); model.addElement(element); Model deserializedModel = getModelAfterSerializing(model); diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlTestFunctions.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlTestFunctions.java index c6037c34c..cce6d49e8 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlTestFunctions.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlTestFunctions.java @@ -57,32 +57,36 @@ public class SbmlTestFunctions { protected static GenericProtein createProtein() { GenericProtein result = new GenericProtein("sa" + (identifierCounter++)); result.setName("SNCA"); - result.setX(10); - result.setWidth(10); - result.setY(10); - result.setHeight(10); - result.setZ(123); - result.setNamePoint(result.getCenter()); + assignCoordinates(10, 10, 10, 10, result); result.setNameHorizontalAlign(HorizontalAlign.LEFT); - result.setNameVerticalAlign(VerticalAlign.MIDDLE); return result; } protected static Compartment createCompartment() { Compartment result = new Compartment("c" + (identifierCounter++)); result.setName("comp name"); - result.setZ(124); - result.setX(10); - result.setY(10); - result.setWidth(10); - result.setHeight(10); - result.setNamePoint(result.getCenter()); + assignCoordinates(10, 10, 10, 10, result); result.setNameHorizontalAlign(HorizontalAlign.LEFT); - result.setNameVerticalAlign(VerticalAlign.MIDDLE); return result; } + static int zIndex = 1; + + protected static void assignCoordinates(double x, double y, double width, double height, Element protein) { + protein.setX(x); + protein.setY(y); + protein.setZ(zIndex++); + protein.setWidth(width); + protein.setHeight(height); + protein.setNameX(x); + protein.setNameY(y); + protein.setNameWidth(width); + protein.setNameHeight(height); + protein.setNameVerticalAlign(VerticalAlign.MIDDLE); + protein.setNameHorizontalAlign(HorizontalAlign.CENTER); + } + @Before public final void _setUp() throws Exception { MinervaLoggerAppender.unregisterLogEventStorage(appender); diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentParserTest.java index a44f7d3da..fb86d77b6 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentParserTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/compartment/SbmlCompartmentParserTest.java @@ -2,7 +2,6 @@ package lcsb.mapviewer.converter.model.sbml.compartment; import static org.junit.Assert.assertEquals; -import java.awt.geom.Point2D; import java.io.FileNotFoundException; import org.apache.logging.log4j.LogManager; @@ -26,8 +25,8 @@ public class SbmlCompartmentParserTest { Model model = parser .createModel(new ConverterParams().filename("testFiles/small/compartment_with_text_position.xml")); Compartment element = model.getElementByElementId("ca1"); - assertEquals("Label position is too far from expected", 0.0, - element.getNamePoint().distance(new Point2D.Double(202.5, 178.5)), Configuration.EPSILON); + assertEquals("Label position is too far from expected", element.getNameX(), 202.5, Configuration.EPSILON); + assertEquals("Label position is too far from expected", element.getNameY(), 178.5, Configuration.EPSILON); } } diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExportArrowType.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExportArrowType.java index 1adfb953a..cd0bd8be0 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExportArrowType.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExportArrowType.java @@ -122,16 +122,11 @@ public class SbmlReactionExportArrowType extends SbmlTestFunctions { private static Ion createIon(int id) { Ion ion = new Ion("x" + id); ion.setName("ion " + id); - ion.setWidth(100); - ion.setHeight(100); - ion.setX(200 * (id % 2 + 1)); - ion.setY(100 * id); + assignCoordinates(200 * (id % 2 + 1), 100 * id, 100, 100, ion); ion.setOnlySubstanceUnits(true); ion.setConstant(true); ion.setInitialAmount(2.0); ion.setBoundaryCondition(true); - ion.setZ(1); - ion.setNamePoint(ion.getCenter()); return ion; } diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java index 6bae0e756..28a92e014 100644 --- a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java +++ b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java @@ -1,6 +1,5 @@ package lcsb.mapviewer.commands; -import java.awt.geom.Point2D; import java.util.*; import org.apache.commons.lang3.math.NumberUtils; @@ -163,8 +162,10 @@ public class CreateHierarchyCommand extends ModelCommand { if (rect.getFillColor() != null) { compartment.setFillColor(rect.getFillColor()); } - compartment.setNamePoint(new Point2D.Double(rect.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT, - rect.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT)); + compartment.setNameX(rect.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT); + compartment.setNameY(rect.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT); + compartment.setNameWidth(rect.getWidth() - 2 * DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT); + compartment.setNameHeight(rect.getHeight() - 2 * DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT); compartment.setNameHorizontalAlign(HorizontalAlign.LEFT); compartment.setNameVerticalAlign(VerticalAlign.TOP); compartment.setZ(rect.getZ()); @@ -189,8 +190,10 @@ public class CreateHierarchyCommand extends ModelCommand { rap.processNotes(compartment); text.setNotes(compartment.getName() + "\n" + compartment.getNotes()); - compartment.setNamePoint(new Point2D.Double(text.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT, - text.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT)); + compartment.setNameX(text.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT); + compartment.setNameY(text.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT); + compartment.setNameWidth(text.getWidth() - 2 * DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT); + compartment.setNameHeight(text.getHeight() - 2 * DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT); compartment.setNameHorizontalAlign(HorizontalAlign.LEFT); compartment.setNameVerticalAlign(VerticalAlign.TOP); diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/MoveCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/MoveCommand.java index c37d96123..ea81aa79a 100644 --- a/model-command/src/main/java/lcsb/mapviewer/commands/MoveCommand.java +++ b/model-command/src/main/java/lcsb/mapviewer/commands/MoveCommand.java @@ -61,7 +61,8 @@ public class MoveCommand extends ModelCommand { for (Element element : model.getElements()) { element.setX(element.getX() + dx); element.setY(element.getY() + dy); - element.setNamePoint(element.getNamePoint().getX() + dx, element.getNamePoint().getY() + dy); + element.setNameX(element.getNameX()+dx); + element.setNameY(element.getNameY()+dy); if (element instanceof SpeciesWithModificationResidue) { for (ModificationResidue mr : ((SpeciesWithModificationResidue) element).getModificationResidues()) { double x = mr.getPosition().getX() + dx; diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/MoveElementsCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/MoveElementsCommand.java index cb65a4c74..99e0cf58d 100644 --- a/model-command/src/main/java/lcsb/mapviewer/commands/MoveElementsCommand.java +++ b/model-command/src/main/java/lcsb/mapviewer/commands/MoveElementsCommand.java @@ -9,7 +9,6 @@ import org.apache.logging.log4j.Logger; import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.common.exception.InvalidStateException; import lcsb.mapviewer.model.map.BioEntity; -import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.reaction.*; import lcsb.mapviewer.model.map.species.Element; @@ -105,11 +104,9 @@ public class MoveElementsCommand extends ModelCommand { alias.setX(alias.getX() + dx); alias.setY(alias.getY() + dy); - if (alias instanceof Compartment) { - ((Compartment) alias) - .setNamePoint(((Compartment) alias).getNamePoint().getX() + dx, - ((Compartment) alias).getNamePoint().getY() + dy); - } + alias.setNameX(alias.getNameX() + dx); + alias.setNameY(alias.getNameY() + dy); + if (alias instanceof SpeciesWithModificationResidue) { for (ModificationResidue mr : ((SpeciesWithModificationResidue) alias).getModificationResidues()) { Point2D position = mr.getPosition(); diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommand.java index edd18c70e..cdcae615c 100644 --- a/model-command/src/main/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommand.java +++ b/model-command/src/main/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommand.java @@ -115,7 +115,10 @@ public class ApplySimpleLayoutModelCommand extends ApplyLayoutModelCommand { Compartment compartment = compartments.iterator().next(); Rectangle2D border = computeCompartmentBorder(compartment, elements, minPoint, dimension); compartment.setBorder(border); - compartment.setNamePoint(border.getX() + COMPARTMENT_BORDER * 2, border.getY() + COMPARTMENT_BORDER * 2); + compartment.setNameX(border.getX() + COMPARTMENT_BORDER * 2); + compartment.setNameY(border.getY() + COMPARTMENT_BORDER * 2); + compartment.setNameWidth(border.getWidth() - COMPARTMENT_BORDER * 4); + compartment.setNameHeight(border.getHeight() - COMPARTMENT_BORDER * 4); compartment.setNameHorizontalAlign(HorizontalAlign.LEFT); compartment.setNameVerticalAlign(VerticalAlign.TOP); Point2D point = new Point2D.Double(border.getX(), border.getY()); @@ -348,7 +351,10 @@ public class ApplySimpleLayoutModelCommand extends ApplyLayoutModelCommand { } element.setX(elementCenterX - SPECIES_WIDTH / 2); element.setY(elementCenterY - SPECIES_HEIGHT / 2); - element.setNamePoint(element.getCenter()); + element.setNameX(element.getX()); + element.setNameY(element.getY()); + element.setNameWidth(element.getWidth()); + element.setNameHeight(element.getHeight()); element.setNameHorizontalAlign(HorizontalAlign.CENTER); element.setNameVerticalAlign(VerticalAlign.MIDDLE); index++; diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/CommandTestFunctions.java b/model-command/src/test/java/lcsb/mapviewer/commands/CommandTestFunctions.java index 4dfb4e7ea..a8acd768f 100644 --- a/model-command/src/test/java/lcsb/mapviewer/commands/CommandTestFunctions.java +++ b/model-command/src/test/java/lcsb/mapviewer/commands/CommandTestFunctions.java @@ -1,6 +1,5 @@ package lcsb.mapviewer.commands; -import java.awt.geom.Point2D; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -14,6 +13,8 @@ import lcsb.mapviewer.common.UnitTestFailedWatcher; import lcsb.mapviewer.converter.ConverterParams; import lcsb.mapviewer.converter.InvalidInputDataExecption; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser; +import lcsb.mapviewer.model.graphics.HorizontalAlign; +import lcsb.mapviewer.model.graphics.VerticalAlign; import lcsb.mapviewer.model.map.Drawable; import lcsb.mapviewer.model.map.InconsistentModelException; import lcsb.mapviewer.model.map.model.Model; @@ -55,7 +56,7 @@ public abstract class CommandTestFunctions { Model model = new ModelFullIndexed(null); GenericProtein alias = new GenericProtein("alias_id"); - alias.setNamePoint(new Point2D.Double()); + assignCoordinates(alias); alias.setNotes(null); List list = new ArrayList<>(); @@ -66,7 +67,7 @@ public abstract class CommandTestFunctions { alias.setFormerSymbols(list2); Complex complexAlias = new Complex("complex_alias_id"); - complexAlias.setNamePoint(new Point2D.Double()); + assignCoordinates(complexAlias); model.addElement(complexAlias); complexAlias.addSpecies(alias); @@ -117,4 +118,25 @@ public abstract class CommandTestFunctions { return result; } + int zIndex = 1; + + protected void assignCoordinates(lcsb.mapviewer.model.map.species.Element element) { + assignCoordinates(1, 1, 10, 20, element); + } + + protected void assignCoordinates(double x, double y, double width, double height, + lcsb.mapviewer.model.map.species.Element element) { + element.setX(x); + element.setY(y); + element.setZ(zIndex++); + element.setWidth(width); + element.setHeight(height); + element.setNameX(x); + element.setNameY(y); + element.setNameWidth(width); + element.setNameHeight(height); + element.setNameVerticalAlign(VerticalAlign.MIDDLE); + element.setNameHorizontalAlign(HorizontalAlign.CENTER); + } + } diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/MoveCommandTest.java b/model-command/src/test/java/lcsb/mapviewer/commands/MoveCommandTest.java index 6d034a0fe..56ebe59ed 100644 --- a/model-command/src/test/java/lcsb/mapviewer/commands/MoveCommandTest.java +++ b/model-command/src/test/java/lcsb/mapviewer/commands/MoveCommandTest.java @@ -13,7 +13,6 @@ import lcsb.mapviewer.model.graphics.PolylineData; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.reaction.*; import lcsb.mapviewer.model.map.reaction.type.TransportReaction; -import lcsb.mapviewer.model.map.species.GenericProtein; import lcsb.mapviewer.model.map.species.Protein; import lcsb.mapviewer.model.map.species.field.BindingRegion; import lcsb.mapviewer.model.map.species.field.StructuralState; @@ -56,24 +55,20 @@ public class MoveCommandTest extends CommandTestFunctions { Protein protein = createProtein(); - protein.setX(10); - protein.setY(20); - protein.setWidth(100); - protein.setHeight(100); - protein.setNamePoint(new Point2D.Double()); - + super.assignCoordinates(10, 20, 100, 100, protein); + BindingRegion bindingRegion = new BindingRegion(); bindingRegion.setPosition(new Point2D.Double(30, 20)); protein.addBindingRegion(bindingRegion); StructuralState state = new StructuralState(); - state.setPosition(new Point2D.Double(40,20)); + state.setPosition(new Point2D.Double(40, 20)); protein.setStructuralState(state); model.addElement(protein); new MoveCommand(model, 10, 20).execute(); - + assertEquals(20, protein.getX(), Configuration.EPSILON); assertEquals(40, protein.getY(), Configuration.EPSILON); assertEquals(new Point2D.Double(40, 40), bindingRegion.getPosition()); diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommandTest.java b/model-command/src/test/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommandTest.java index 4588fa250..ac4caa3d0 100644 --- a/model-command/src/test/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommandTest.java +++ b/model-command/src/test/java/lcsb/mapviewer/commands/layout/ApplySimpleLayoutModelCommandTest.java @@ -181,7 +181,10 @@ public class ApplySimpleLayoutModelCommandTest extends CommandTestFunctions { assertTrue(p2.getY() >= 100); assertTrue(p2.getBorder().getMaxX() <= 300); assertTrue(p2.getBorder().getMaxY() <= 300); - assertNotNull(p2.getNamePoint()); + assertNotNull(p2.getNameX()); + assertNotNull(p2.getNameY()); + assertNotNull(p2.getNameWidth()); + assertNotNull(p2.getNameHeight()); assertNotNull(p2.getNameHorizontalAlign()); assertNotNull(p2.getNameVerticalAlign()); } diff --git a/model/src/main/java/lcsb/mapviewer/model/map/compartment/PathwayCompartment.java b/model/src/main/java/lcsb/mapviewer/model/map/compartment/PathwayCompartment.java index 54e13a257..0412e608b 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/compartment/PathwayCompartment.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/compartment/PathwayCompartment.java @@ -1,6 +1,6 @@ package lcsb.mapviewer.model.map.compartment; -import java.awt.*; +import java.awt.Color; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @@ -64,4 +64,5 @@ public class PathwayCompartment extends Compartment { public String getStringType() { return "Pathway"; } + } diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java b/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java index 18bf452fa..4529d2305 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java @@ -7,14 +7,12 @@ import java.io.Serializable; import java.util.*; import javax.persistence.*; -import javax.persistence.Entity; import javax.xml.bind.annotation.XmlTransient; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; -import org.hibernate.annotations.Type; import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.model.graphics.HorizontalAlign; @@ -227,12 +225,17 @@ public abstract class Element implements BioEntity, Serializable, SbmlArgument { @Column(length = 255) private String name = ""; - /** - * Coordinates of the name on the canvas. - */ - @Type(type = "lcsb.mapviewer.persist.mapper.Point2DMapper") + @Column(nullable = false, name = "name_x") + private Double nameX; + + @Column(nullable = false, name = "name_y") + private Double nameY; + + @Column(nullable = false) + private Double nameWidth; + @Column(nullable = false) - private Point2D namePoint; + private Double nameHeight; @Enumerated(EnumType.STRING) @Column(nullable = false) @@ -279,11 +282,12 @@ public abstract class Element implements BioEntity, Serializable, SbmlArgument { * original object that will be used for creating copy */ protected Element(Element original) { - if (original.getNamePoint() != null) { - namePoint = (Point2D) original.getNamePoint().clone(); - } this.nameHorizontalAlign = original.getNameHorizontalAlign(); this.nameVerticalAlign = original.getNameVerticalAlign(); + this.nameX = original.getNameX(); + this.nameY = original.getNameY(); + this.nameWidth = original.getNameWidth(); + this.nameHeight = original.getNameHeight(); elementId = original.getElementId(); x = original.getX(); @@ -435,6 +439,15 @@ public abstract class Element implements BioEntity, Serializable, SbmlArgument { return new Rectangle2D.Double(x, y, width, height); } + public Rectangle2D getNameBorder() { + if (nameX == null || nameY == null || nameWidth == null || nameHeight == null || nameWidth == 0.0 + || nameHeight == 0.0) { + logger.warn("Name border is not defined"); + return getBorder(); + } + return new Rectangle2D.Double(nameX, nameY, nameWidth, nameHeight); + } + public void setBorder(Rectangle2D border) { setX(border.getX()); setY(border.getY()); @@ -442,6 +455,13 @@ public abstract class Element implements BioEntity, Serializable, SbmlArgument { setHeight(border.getHeight()); } + public void setNameBorder(Rectangle2D border) { + setNameX(border.getX()); + setNameY(border.getY()); + setNameWidth(border.getWidth()); + setNameHeight(border.getHeight()); + } + /** * Checks if the element2 (given as parameter) is placed inside this element. * This method should be overridden by all inheriting classes - it should @@ -1118,27 +1138,6 @@ public abstract class Element implements BioEntity, Serializable, SbmlArgument { this.borderColor = borderColor; } - public Point2D getNamePoint() { - return namePoint; - } - - public void setNamePoint(Point2D namePoint) { - this.namePoint = namePoint; - } - - - /** - * Set coordinate of the description point. - * - * @param x - * x coordinate to be set - * @param y - * y coordinate to be set - */ - public void setNamePoint(double x, double y) { - setNamePoint(new Point2D.Double(x, y)); - } - public HorizontalAlign getNameHorizontalAlign() { return nameHorizontalAlign; } @@ -1155,4 +1154,36 @@ public abstract class Element implements BioEntity, Serializable, SbmlArgument { this.nameVerticalAlign = nameVerticalAlign; } + public Double getNameX() { + return nameX; + } + + public void setNameX(double nameX) { + this.nameX = nameX; + } + + public Double getNameY() { + return nameY; + } + + public void setNameY(double nameY) { + this.nameY = nameY; + } + + public Double getNameWidth() { + return nameWidth; + } + + public void setNameWidth(double nameWidth) { + this.nameWidth = nameWidth; + } + + public Double getNameHeight() { + return nameHeight; + } + + public void setNameHeight(double nameHeight) { + this.nameHeight = nameHeight; + } + } \ No newline at end of file diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java index cfd997885..96b1d7248 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java @@ -184,22 +184,37 @@ public class ElementComparator extends Comparator { return status; } - PointComparator pointComparator = new PointComparator(epsilon); + if (doubleComparator.compare(arg0.getNameX(), arg1.getNameX()) != 0) { + logger.debug("NameX different: " + arg0.getNameX() + ", " + arg1.getNameX()); + return doubleComparator.compare(arg0.getNameX(), arg1.getNameX()); + } + + if (doubleComparator.compare(arg0.getNameY(), arg1.getNameY()) != 0) { + logger.debug("NameY different: " + arg0.getNameY() + ", " + arg1.getNameY()); + return doubleComparator.compare(arg0.getNameY(), arg1.getNameY()); + } + + if (doubleComparator.compare(arg0.getNameWidth(), arg1.getNameWidth()) != 0) { + logger.debug("NameWidth different: " + arg0.getNameWidth() + ", " + arg1.getNameWidth()); + return doubleComparator.compare(arg0.getNameWidth(), arg1.getNameWidth()); + } - if (pointComparator.compare(arg0.getNamePoint(), arg1.getNamePoint()) != 0) { - logger.debug("NamePoint different: " + arg0.getNamePoint() + ", " + arg1.getNamePoint()); - return pointComparator.compare(arg0.getNamePoint(), arg1.getNamePoint()); + if (doubleComparator.compare(arg0.getNameHeight(), arg1.getNameHeight()) != 0) { + logger.debug("NameHeight different: " + arg0.getNameHeight() + ", " + arg1.getNameHeight()); + return doubleComparator.compare(arg0.getNameHeight(), arg1.getNameHeight()); } EnumComparator verticalAlignComparator = new EnumComparator<>(); if (verticalAlignComparator.compare(arg0.getNameVerticalAlign(), arg1.getNameVerticalAlign()) != 0) { - logger.debug("NamePoint vertical alignment different: " + arg0.getNameVerticalAlign() + ", " + arg1.getNameVerticalAlign()); + logger.debug("Name vertical alignment different: " + arg0.getNameVerticalAlign() + ", " + + arg1.getNameVerticalAlign()); return verticalAlignComparator.compare(arg0.getNameVerticalAlign(), arg1.getNameVerticalAlign()); } EnumComparator horizontalAlignComparator = new EnumComparator<>(); if (horizontalAlignComparator.compare(arg0.getNameHorizontalAlign(), arg1.getNameHorizontalAlign()) != 0) { - logger.debug("NamePoint horizontal alignment different: " + arg0.getNameHorizontalAlign() + ", " + arg1.getNameHorizontalAlign()); + logger.debug("Name horizontal alignment different: " + arg0.getNameHorizontalAlign() + ", " + + arg1.getNameHorizontalAlign()); return horizontalAlignComparator.compare(arg0.getNameHorizontalAlign(), arg1.getNameHorizontalAlign()); } diff --git a/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentComparatorTest.java index d5a334daa..a844d2488 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentComparatorTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentComparatorTest.java @@ -3,8 +3,7 @@ package lcsb.mapviewer.model.map.compartment; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import java.awt.*; -import java.awt.geom.Point2D; +import java.awt.Color; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -92,7 +91,8 @@ public class CompartmentComparatorTest extends ModelTestFunctions { result.setThickness(998); result.setOuterWidth(45); result.setInnerWidth(65); - result.setNamePoint(new Point2D.Double(9, 2)); + result.setNameX(9); + result.setNameY(2); GenericProtein protein = new GenericProtein("S"); protein.setName("a"); @@ -142,14 +142,6 @@ public class CompartmentComparatorTest extends ModelTestFunctions { compartment1 = createCompartment(); compartment2 = createCompartment(); - compartment1.setNamePoint(new Point2D.Double(9, 999)); - - assertTrue(comparator.compare(compartment1, compartment2) != 0); - assertTrue(comparator.compare(compartment2, compartment1) != 0); - - compartment1 = createCompartment(); - compartment2 = createCompartment(); - compartment1.getElements().iterator().next().setElementId("bnu"); assertTrue(comparator.compare(compartment1, compartment2) != 0); @@ -184,4 +176,48 @@ public class CompartmentComparatorTest extends ModelTestFunctions { compartment2 = createCompartment(); } + @Test + public void testDifferentNameXCoordinate() { + Compartment compartment1 = createCompartment(); + Compartment compartment2 = createCompartment(); + + compartment1.setNameX(19); + + assertTrue(comparator.compare(compartment1, compartment2) != 0); + assertTrue(comparator.compare(compartment2, compartment1) != 0); + } + + @Test + public void testDifferentNameYCoordinate() { + Compartment compartment1 = createCompartment(); + Compartment compartment2 = createCompartment(); + + compartment1.setNameY(9); + + assertTrue(comparator.compare(compartment1, compartment2) != 0); + assertTrue(comparator.compare(compartment2, compartment1) != 0); + } + + @Test + public void testDifferentNameWidthCoordinate() { + Compartment compartment1 = createCompartment(); + Compartment compartment2 = createCompartment(); + + compartment1.setNameWidth(9); + + assertTrue(comparator.compare(compartment1, compartment2) != 0); + assertTrue(comparator.compare(compartment2, compartment1) != 0); + } + + @Test + public void testDifferentNameHeightCoordinate() { + Compartment compartment1 = createCompartment(); + Compartment compartment2 = createCompartment(); + + compartment1.setNameHeight(9); + + assertTrue(comparator.compare(compartment1, compartment2) != 0); + assertTrue(comparator.compare(compartment2, compartment1) != 0); + } + } diff --git a/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentTest.java b/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentTest.java index 59c5cf843..a715b038f 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentTest.java @@ -240,8 +240,11 @@ public class CompartmentTest extends ModelTestFunctions { assertEquals(dVal, compartment.getOuterWidth(), Configuration.EPSILON); assertEquals(dVal, compartment.getInnerWidth(), Configuration.EPSILON); - compartment.setNamePoint(2, 3); - assertEquals(0, compartment.getNamePoint().distance(2, 3), Configuration.EPSILON); + compartment.setNameX(2); + compartment.setNameY(3); + + assertEquals(compartment.getNameX(), 2, Configuration.EPSILON); + assertEquals(compartment.getNameY(), 3, Configuration.EPSILON); Set elements = new HashSet<>(); diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelContructor.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelContructor.java index bcddd75d1..a8dcbf9c4 100644 --- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelContructor.java +++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelContructor.java @@ -43,7 +43,7 @@ public class ModelContructor { /** * Default color used by complexes. */ - static final Color DEFAULT_COMPLEX_ALIAS_COLOR = new Color(248, 247, 240); + static final Color DEFAULT_COMPLEX_ALIAS_COLOR = new Color(248, 247, 240); /** * Epsilon used for double comparison. @@ -176,9 +176,7 @@ public class ModelContructor { element.setY(rec.getY()); element.setWidth(rec.getWidth()); element.setHeight(rec.getHeight()); - element.setNamePoint(getDefaultNamePointCoordinates(element)); - element.setNameHorizontalAlign(getDefaultNameHorizontalAlign(element)); - element.setNameVerticalAlign(getDefaultNameVerticalAlign(element)); + assignNameCoordinates(element); element.setZ(group.getzOrder()); element.setFillColor(DEFAULT_COMPLEX_ALIAS_COLOR); @@ -491,9 +489,7 @@ public class ModelContructor { element.setHeight(1.0); } - element.setNamePoint(getDefaultNamePointCoordinates(element)); - element.setNameHorizontalAlign(getDefaultNameHorizontalAlign(element)); - element.setNameVerticalAlign(getDefaultNameVerticalAlign(element)); + assignNameCoordinates(element); element.setFillColor(gpmlElement.getFillColor()); if (element instanceof Compartment && !Objects.equals(Color.WHITE, gpmlElement.getFillColor())) { @@ -509,33 +505,25 @@ public class ModelContructor { return element; } - private VerticalAlign getDefaultNameVerticalAlign(Element element) { + private void assignNameCoordinates(Element element) { + element.setNameWidth(element.getWidth()); + element.setNameHeight(element.getHeight()); if (element instanceof Compartment) { - return VerticalAlign.TOP; + element.setNameX(element.getX()); + element.setNameY(element.getY()); + element.setNameHorizontalAlign(HorizontalAlign.LEFT); + element.setNameVerticalAlign(VerticalAlign.TOP); } else if (element instanceof Complex) { - return VerticalAlign.BOTTOM; + element.setNameX(element.getX()); + element.setNameY(element.getY()); + element.setNameHeight(element.getHeight() - 2); + element.setNameHorizontalAlign(HorizontalAlign.CENTER); + element.setNameVerticalAlign(VerticalAlign.BOTTOM); } else { - return VerticalAlign.MIDDLE; - } - } - - private HorizontalAlign getDefaultNameHorizontalAlign(Element element) { - if (element instanceof Compartment) { - return HorizontalAlign.LEFT; - } else if (element instanceof Complex) { - return HorizontalAlign.CENTER; - } else { - return HorizontalAlign.CENTER; - } - } - - private Point2D getDefaultNamePointCoordinates(Element element) { - if (element instanceof Compartment) { - return new Point2D.Double(element.getX(), element.getY()); - } else if (element instanceof Complex) { - return new Point2D.Double(element.getCenterX(), element.getY() + element.getHeight() - 2); - } else { - return element.getCenter(); + element.setNameX(element.getX()); + element.setNameY(element.getY()); + element.setNameHorizontalAlign(HorizontalAlign.CENTER); + element.setNameVerticalAlign(VerticalAlign.MIDDLE); } } @@ -625,7 +613,10 @@ public class ModelContructor { // if complex has generic name then change it into label if (parent.getName().equals(group.getGraphId()) || parent.getName().trim().isEmpty()) { parent.setName(label.getTextLabel()); - parent.setNamePoint(label.getRectangle().getCenterX(), label.getRectangle().getCenterY()); + parent.setNameX(label.getRectangle().getMinX()); + parent.setNameY(label.getRectangle().getMinY()); + parent.setNameWidth(label.getRectangle().getWidth()); + parent.setNameHeight(label.getRectangle().getHeight()); parent.setNameHorizontalAlign(HorizontalAlign.CENTER); parent.setNameVerticalAlign(VerticalAlign.MIDDLE); } else { @@ -674,7 +665,7 @@ public class ModelContructor { reaction.setReversible(true); } } - + reaction.setNotes(getComments(interaction)); reaction.addMiriamData(interaction.getReferences()); @@ -799,7 +790,8 @@ public class ModelContructor { ModifierTypeUtils mtu = new ModifierTypeUtils(); for (Modifier modifier : reaction.getModifiers()) { modifier.getLine().setEndPoint(modifier.getLine().getPoints().get(modifier.getLine().getPoints().size() - 2)); - modifier.getLine().setEndPoint(mtu.getAnchorPointOnReactionRect(reaction, mtu.getTargetLineIndexByModifier(modifier))); + modifier.getLine() + .setEndPoint(mtu.getAnchorPointOnReactionRect(reaction, mtu.getTargetLineIndexByModifier(modifier))); ModifierType mt = mtu.getModifierTypeForClazz(modifier.getClass()); modifier.getLine().trimEnd(mt.getTrimLength()); @@ -916,12 +908,12 @@ public class ModelContructor { * * @param reactionType * type of reaction to create - * @param elementId + * @param elementId * @return new instance of the reactionType */ private Reaction createReactionByType(Class reactionType, String elementId) { try { - Reaction result = reactionType.getConstructor(String.class).newInstance(new Object[] {elementId}); + Reaction result = reactionType.getConstructor(String.class).newInstance(new Object[] { elementId }); return result; } catch (Exception e) { throw new InvalidArgumentException("Cannot create reaction.", e); @@ -1180,7 +1172,10 @@ public class ModelContructor { } elementsToRemove.add(child); - complex.setNamePoint(child.getCenter()); + complex.setNameX(child.getX()); + complex.setNameY(child.getY()); + complex.setNameWidth(child.getWidth()); + complex.setNameHeight(child.getHeight()); complex.setNameHorizontalAlign(HorizontalAlign.CENTER); complex.setNameVerticalAlign(VerticalAlign.MIDDLE); @@ -1194,7 +1189,10 @@ public class ModelContructor { for (LayerText lt : layer.getTexts()) { if (complex.contains(lt)) { complex.setName(lt.getNotes()); - complex.setNamePoint(lt.getX(), lt.getY()); + complex.setNameX(lt.getX()); + complex.setNameY(lt.getY()); + complex.setNameWidth(lt.getWidth()); + complex.setNameHeight(lt.getHeight()); complex.setNameHorizontalAlign(HorizontalAlign.LEFT); complex.setNameVerticalAlign(VerticalAlign.TOP); toRemove = lt; @@ -1232,7 +1230,10 @@ public class ModelContructor { for (LayerText lt : layer.getTexts()) { if (compartment.contains(lt)) { compartment.setName(lt.getNotes()); - compartment.setNamePoint(new Point2D.Double(lt.getX(), lt.getY())); + compartment.setNameX(lt.getX()); + compartment.setNameY(lt.getY()); + compartment.setNameWidth(lt.getWidth()); + compartment.setNameHeight(lt.getHeight()); compartment.setNameHorizontalAlign(HorizontalAlign.LEFT); compartment.setNameVerticalAlign(VerticalAlign.TOP); toRemove = lt; diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java index 34277d4b4..130ae194e 100644 --- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java +++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java @@ -3,6 +3,7 @@ package lcsb.mapviewer.wikipathway; import static org.junit.Assert.*; import java.awt.geom.Line2D; +import java.awt.geom.Point2D; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -466,7 +467,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions { Model model = new GPMLToModel().getModel(fileName); Compartment compartment = model.getElementByElementId("d5695"); assertFalse(compartment.getName().isEmpty()); - assertTrue(compartment.contains(compartment.getNamePoint())); + assertTrue(compartment.contains(new Point2D.Double(compartment.getNameX(), compartment.getNameY()))); } @Test diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java index 4fed8307a..338c834e7 100644 --- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java +++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java @@ -25,7 +25,7 @@ import lcsb.mapviewer.common.*; import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; import lcsb.mapviewer.converter.*; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser; -import lcsb.mapviewer.model.graphics.PolylineData; +import lcsb.mapviewer.model.graphics.*; import lcsb.mapviewer.model.map.Drawable; import lcsb.mapviewer.model.map.InconsistentModelException; import lcsb.mapviewer.model.map.compartment.Compartment; @@ -249,23 +249,45 @@ public abstract class WikipathwaysTestFunctions { InputStream is = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)); for (Species bioEntity : model1.getSpeciesList()) { - //CellDesigner doesn't allow to store border color + // CellDesigner doesn't allow to store border color bioEntity.setBorderColor(Color.BLACK); - //CellDesigner doesn't allow to store name point position - bioEntity.setNamePoint(null); + // CellDesigner doesn't allow to store name point position + bioEntity.setNameX(0); + bioEntity.setNameY(0); + bioEntity.setNameWidth(0); + bioEntity.setNameHeight(0); bioEntity.setNameHorizontalAlign(null); bioEntity.setNameVerticalAlign(null); } - Model model2 = parser.createModel(new ConverterParams().inputStream(is).sizeAutoAdjust(false)); for (Species bioEntity : model2.getSpeciesList()) { - //CellDesigner doesn't allow to store name point position - bioEntity.setNamePoint(null); + // CellDesigner doesn't allow to store name point position + bioEntity.setNameX(0); + bioEntity.setNameY(0); + bioEntity.setNameWidth(0); + bioEntity.setNameHeight(0); bioEntity.setNameHorizontalAlign(null); bioEntity.setNameVerticalAlign(null); } return model2; } + int zIndex = 10; + + protected void assignCoordinates(double x, double y, double width, double height, + lcsb.mapviewer.model.map.species.Element element) { + element.setX(x); + element.setY(y); + element.setZ(zIndex++); + element.setWidth(width); + element.setHeight(height); + element.setNameX(x); + element.setNameY(y); + element.setNameWidth(width); + element.setNameHeight(height); + element.setNameVerticalAlign(VerticalAlign.MIDDLE); + element.setNameHorizontalAlign(HorizontalAlign.CENTER); + } + } diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelContructorTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelContructorTest.java index a7d4a7a7d..6e8d82950 100644 --- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelContructorTest.java +++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelContructorTest.java @@ -14,8 +14,6 @@ import org.apache.logging.log4j.Logger; import org.junit.*; import lcsb.mapviewer.common.Configuration; -import lcsb.mapviewer.model.graphics.HorizontalAlign; -import lcsb.mapviewer.model.graphics.VerticalAlign; import lcsb.mapviewer.model.map.compartment.PathwayCompartment; import lcsb.mapviewer.model.map.layout.graphics.LayerRect; import lcsb.mapviewer.model.map.layout.graphics.LayerText; @@ -147,14 +145,7 @@ public class ModelContructorTest extends WikipathwaysTestFunctions { private GenericProtein createProtein() { GenericProtein result = new GenericProtein("s" + (elementCounter++)); - result.setX(100); - result.setY(20); - result.setWidth(100); - result.setHeight(30); - result.setZ(7890); - result.setNamePoint(result.getCenter()); - result.setNameHorizontalAlign(HorizontalAlign.CENTER); - result.setNameVerticalAlign(VerticalAlign.MIDDLE); + super.assignCoordinates(100, 20, 100, 30, result); return result; } diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelToGPMLTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelToGPMLTest.java index 032ce4ba4..173a70170 100644 --- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelToGPMLTest.java +++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelToGPMLTest.java @@ -271,26 +271,13 @@ public class ModelToGPMLTest extends WikipathwaysTestFunctions { private Unknown createUnknown() { Unknown result = new Unknown("id" + (speciesCounter++)); - setObligatoryFields(result); + super.assignCoordinates(1, 1, 10, 10, result); return result; } - private void setObligatoryFields(Species species) { - species.setName("s2"); - species.setWidth(10); - species.setHeight(10); - species.setX(1); - species.setY(1); - species.setZ(15); - - species.setNamePoint(species.getCenter()); - species.setNameHorizontalAlign(HorizontalAlign.CENTER); - species.setNameVerticalAlign(VerticalAlign.MIDDLE); - } - private Degraded createDegraded() { Degraded result = new Degraded("id" + (speciesCounter++)); - setObligatoryFields(result); + super.assignCoordinates(1, 1, 10, 10, result); result.setName(""); return result; @@ -299,30 +286,15 @@ public class ModelToGPMLTest extends WikipathwaysTestFunctions { private GenericProtein createProtein() { GenericProtein protein = new GenericProtein("sa" + (speciesCounter++)); protein.setName("s2"); - protein.setWidth(10); - protein.setHeight(10); - protein.setX(100 * speciesCounter); - protein.setY(10 + 100 * speciesCounter * Math.random()); - protein.setZ(16); - - protein.setNamePoint(protein.getCenter()); - protein.setNameHorizontalAlign(HorizontalAlign.CENTER); - protein.setNameVerticalAlign(VerticalAlign.MIDDLE); - + super.assignCoordinates(100 * speciesCounter, 10 + 100 * speciesCounter * Math.random(), 10, 10, protein); + return protein; } private Complex createComplex() { Complex complex = new Complex("sa" + (speciesCounter++)); complex.setName("s2"); - complex.setWidth(10); - complex.setHeight(10); - complex.setX(1); - complex.setY(1); - complex.setZ(15); - complex.setNamePoint(6, 9); - complex.setNameVerticalAlign(VerticalAlign.BOTTOM); - complex.setNameHorizontalAlign(HorizontalAlign.CENTER); + super.assignCoordinates(1, 1, 10, 10, complex); complex.setHypothetical(true); return complex; } @@ -330,14 +302,7 @@ public class ModelToGPMLTest extends WikipathwaysTestFunctions { private Compartment createCompartment() { Compartment compartment = new SquareCompartment("ca" + (speciesCounter++)); compartment.setName("s2"); - compartment.setWidth(10); - compartment.setHeight(10); - compartment.setX(1); - compartment.setY(1); - compartment.setZ(15); - compartment.setNamePoint(new Point2D.Double(1, 1)); - compartment.setNameVerticalAlign(VerticalAlign.TOP); - compartment.setNameHorizontalAlign(HorizontalAlign.LEFT); + super.assignCoordinates(1, 1, 10, 10, compartment); compartment.setThickness(0); compartment.setOuterWidth(0); compartment.setInnerWidth(0); diff --git a/persist/src/main/resources/db/migration/15.1.0~beta.1/V15.1.0.20200814__label_border.sql b/persist/src/main/resources/db/migration/15.1.0~beta.1/V15.1.0.20200814__label_border.sql new file mode 100644 index 000000000..a7e4acf4a --- /dev/null +++ b/persist/src/main/resources/db/migration/15.1.0~beta.1/V15.1.0.20200814__label_border.sql @@ -0,0 +1,50 @@ +--alter table element_table drop column point_x; +--alter table element_table drop column point_y; +--alter table element_table drop column name_x; +--alter table element_table drop column name_y; +--alter table element_table drop column name_width; +--alter table element_table drop column name_height; + +alter table element_table add column point_x double precision; +alter table element_table add column point_y double precision; + +update element_table set point_x = cast (split_part(name_point, ',',1) as double precision); +update element_table set point_y = cast (split_part(name_point, ',',2) as double precision); + +alter table element_table add column name_x double precision; +alter table element_table add column name_y double precision; +alter table element_table add column name_width double precision; +alter table element_table add column name_height double precision; + +update element_table set name_x = point_x where name_horizontal_align='LEFT'; +update element_table set name_x = point_x-least(point_x-x,width-(point_x-x)) where name_horizontal_align='CENTER'; +update element_table set name_x = x where name_horizontal_align='RIGHT'; + +update element_table set name_width = width-(name_x-x) where name_horizontal_align='LEFT'; +update element_table set name_width = 2*(point_x-name_x) where name_horizontal_align='CENTER'; +update element_table set name_width = point_x-x where name_horizontal_align='RIGHT'; + +update element_table set name_y = point_y where name_vertical_align='TOP'; +update element_table set name_y = point_y-least(point_y-y,height-(point_y-y)) where name_vertical_align='MIDDLE'; +update element_table set name_y = y where name_vertical_align='BOTTOM'; + +update element_table set name_height = height-(name_y-y) where name_vertical_align='TOP'; +update element_table set name_height = 2*(point_y-name_y) where name_vertical_align='MIDDLE'; +update element_table set name_height = point_y-y where name_vertical_align='BOTTOM'; + +update element_table set name_width=1 where name_width<=0; +update element_table set name_height=1 where name_height<=0; + +update element_table set name_x = x where name_x is null; +update element_table set name_y = y where name_y is null; +update element_table set name_width = width where name_width is null; +update element_table set name_height = height where name_height is null; + +alter table element_table alter column name_x set not null; +alter table element_table alter column name_y set not null; +alter table element_table alter column name_width set not null; +alter table element_table alter column name_height set not null; + +alter table element_table drop column name_point; +alter table element_table drop column point_x; +alter table element_table drop column point_y; diff --git a/persist/src/test/java/lcsb/mapviewer/persist/ObjectValidatorTest.java b/persist/src/test/java/lcsb/mapviewer/persist/ObjectValidatorTest.java index 2123dacd7..d64f15f22 100644 --- a/persist/src/test/java/lcsb/mapviewer/persist/ObjectValidatorTest.java +++ b/persist/src/test/java/lcsb/mapviewer/persist/ObjectValidatorTest.java @@ -5,37 +5,36 @@ import static org.junit.Assert.assertNull; import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.junit.Test; import lcsb.mapviewer.common.Pair; import lcsb.mapviewer.model.Project; -import lcsb.mapviewer.model.graphics.*; +import lcsb.mapviewer.model.graphics.PolylineData; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelFullIndexed; import lcsb.mapviewer.model.map.reaction.Reaction; import lcsb.mapviewer.model.map.reaction.type.TransportReaction; -import lcsb.mapviewer.model.map.species.GenericProtein; import lcsb.mapviewer.model.map.species.Protein; public class ObjectValidatorTest extends PersistTestFunctions { + Logger logger = LogManager.getLogger(); ObjectValidator objectValidator = new ObjectValidator(); @Test public void testGetValidationSubjectForSpeciesIssue() throws Exception { - Protein protein = new GenericProtein("id"); + Protein protein = createProtein("pid"); protein.setFontSize((Double) null); - protein.setZ(1); - protein.setNamePoint(protein.getCenter()); - protein.setNameVerticalAlign(VerticalAlign.MIDDLE); - protein.setNameHorizontalAlign(HorizontalAlign.CENTER); - + Project project = new Project("proj"); Model model = new ModelFullIndexed(null); project.addModel(model); model.addElement(protein); List> issues = objectValidator.getValidationIssues(project); + logger.debug(issues); assertEquals(1, issues.size()); assertEquals(protein, issues.get(0).getLeft()); } diff --git a/persist/src/test/java/lcsb/mapviewer/persist/PersistTestFunctions.java b/persist/src/test/java/lcsb/mapviewer/persist/PersistTestFunctions.java index 870f69749..aeee4cf94 100644 --- a/persist/src/test/java/lcsb/mapviewer/persist/PersistTestFunctions.java +++ b/persist/src/test/java/lcsb/mapviewer/persist/PersistTestFunctions.java @@ -62,14 +62,7 @@ public abstract class PersistTestFunctions { protected Compartment createCompartment(double x, double y, double width, double height, String compartmentId) { Compartment compartment = new Compartment(compartmentId); - compartment.setX(x); - compartment.setY(y); - compartment.setZ(zIndex++); - compartment.setWidth(width); - compartment.setHeight(height); - compartment.setNamePoint(compartment.getCenter()); - compartment.setNameVerticalAlign(VerticalAlign.MIDDLE); - compartment.setNameHorizontalAlign(HorizontalAlign.CENTER); + assignCoordinates(x, y, width, height, compartment); return compartment; } @@ -84,71 +77,51 @@ public abstract class PersistTestFunctions { protected GenericProtein createProtein(double x, double y, double width, double height, String proteinId) { GenericProtein protein = new GenericProtein("s" + identifierCounter++); protein.setElementId(proteinId); + assignCoordinates(x, y, width, height, protein); + return protein; + } + + private void assignCoordinates(double x, double y, double width, double height, Element protein) { protein.setX(x); protein.setY(y); protein.setZ(zIndex++); protein.setWidth(width); protein.setHeight(height); - protein.setNamePoint(protein.getCenter()); + protein.setNameX(x); + protein.setNameY(y); + protein.setNameWidth(width); + protein.setNameHeight(height); protein.setNameVerticalAlign(VerticalAlign.MIDDLE); protein.setNameHorizontalAlign(HorizontalAlign.CENTER); - return protein; } protected Complex createComplex(double x, double y, double width, double height, String complexId) { Complex complex = new Complex(complexId); - complex.setX(x); - complex.setY(y); - complex.setZ(zIndex++); - complex.setWidth(width); - complex.setHeight(height); - complex.setNamePoint(complex.getCenter()); - complex.setNameVerticalAlign(VerticalAlign.MIDDLE); - complex.setNameHorizontalAlign(HorizontalAlign.CENTER); + assignCoordinates(x, y, width, height, complex); return complex; } protected AntisenseRna createAntisenseRna(String aRnaId) { AntisenseRna antisenseRna = new AntisenseRna(aRnaId); - antisenseRna.setX(1); - antisenseRna.setY(2); - antisenseRna.setZ(zIndex++); - antisenseRna.setWidth(10); - antisenseRna.setHeight(20); - antisenseRna.setNamePoint(antisenseRna.getCenter()); - antisenseRna.setNameVerticalAlign(VerticalAlign.MIDDLE); - antisenseRna.setNameHorizontalAlign(HorizontalAlign.CENTER); + assignCoordinates(1, 2, 10, 20, antisenseRna); return antisenseRna; } protected Chemical createIon(String ionId) { Chemical ion = new Ion(ionId); - ion.setZ(zIndex++); - ion.setNamePoint(ion.getCenter()); - ion.setNameVerticalAlign(VerticalAlign.MIDDLE); - ion.setNameHorizontalAlign(HorizontalAlign.CENTER); + assignCoordinates(1, 2, 10, 20, ion); return ion; } protected Phenotype createPhenotype(String phenotypeId) { Phenotype phenotype = new Phenotype(phenotypeId); - phenotype.setZ(zIndex++); - phenotype.setNamePoint(phenotype.getCenter()); - phenotype.setNameVerticalAlign(VerticalAlign.MIDDLE); - phenotype.setNameHorizontalAlign(HorizontalAlign.CENTER); + assignCoordinates(1, 2, 10, 20, phenotype); return phenotype; } protected Rna createRna(String rnaId) { Rna rna = new Rna(rnaId); - rna.setX(1); - rna.setY(2); - rna.setZ(zIndex++); - rna.setWidth(10); - rna.setHeight(20); - rna.setNamePoint(rna.getCenter()); - rna.setNameVerticalAlign(VerticalAlign.MIDDLE); - rna.setNameHorizontalAlign(HorizontalAlign.CENTER); + assignCoordinates(1, 2, 10, 20, rna); return rna; } diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/comments/CommentRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/comments/CommentRestImplTest.java index fc7869fca..770a25adb 100644 --- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/comments/CommentRestImplTest.java +++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/comments/CommentRestImplTest.java @@ -1,8 +1,6 @@ package lcsb.mapviewer.api.projects.comments; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.times; import java.util.ArrayList; import java.util.List; diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java index ca7e0c584..8ff1daa0e 100644 --- a/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java +++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/ICommentService.java @@ -3,7 +3,6 @@ package lcsb.mapviewer.services.interfaces; import java.awt.geom.Point2D; import java.util.List; -import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.map.Comment; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelData; diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/SearchServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/SearchServiceTest.java index bdf690d4a..9caed31ab 100644 --- a/service/src/test/java/lcsb/mapviewer/services/impl/SearchServiceTest.java +++ b/service/src/test/java/lcsb/mapviewer/services/impl/SearchServiceTest.java @@ -1,7 +1,6 @@ package lcsb.mapviewer.services.impl; import static org.junit.Assert.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; import java.awt.geom.Point2D; import java.util.*; @@ -10,9 +9,6 @@ import org.apache.commons.lang.mutable.MutableBoolean; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.*; -import org.mockito.Mockito; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.RequestBuilder; import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.model.Project; diff --git a/web/src/test/java/lcsb/mapviewer/web/ControllerIntegrationTest.java b/web/src/test/java/lcsb/mapviewer/web/ControllerIntegrationTest.java index ec6b8dd86..990c152c0 100644 --- a/web/src/test/java/lcsb/mapviewer/web/ControllerIntegrationTest.java +++ b/web/src/test/java/lcsb/mapviewer/web/ControllerIntegrationTest.java @@ -197,7 +197,7 @@ abstract public class ControllerIntegrationTest { User admin = userService.getUserByLogin(BUILT_IN_TEST_ADMIN_LOGIN); Project project = new Project(projectId); project.setOwner(admin); - UploadedFileEntry file = createFile(Files.readAllBytes(Paths.get("./src/test/resources/empty.png")), admin); + UploadedFileEntry file = createFile(Files.readAllBytes(Paths.get("./src/test/resources/empty.png")), admin); ModelData map = new ModelData(); map.setTileSize(256); map.setWidth(100); @@ -244,31 +244,39 @@ abstract public class ControllerIntegrationTest { submap.setWidth(100); submap.setHeight(100); submap.addElement(createProtein()); - + ModelSubmodelConnection submodelConnection = new ModelSubmodelConnection(submap, SubmodelType.UNKNOWN); map.addSubmodel(submodelConnection); - project.addModel(map); projectDao.add(project); return project; } int counter = 1; - + private GenericProtein createProtein() { - GenericProtein element = new GenericProtein("p"+(counter++)); - element.setWidth(100.0); - element.setHeight(20.0); - element.setX(10); - element.setX(20); - element.setZ(2); - element.setNamePoint(element.getCenter()); - element.setNameHorizontalAlign(HorizontalAlign.CENTER); - element.setNameVerticalAlign(VerticalAlign.MIDDLE); + GenericProtein element = new GenericProtein("p" + (counter++)); + assignCoordinates(10, 20, 100, 20, element); return element; } + int zIndex = 10; + + private void assignCoordinates(double x, double y, double width, double height, Element protein) { + protein.setX(x); + protein.setY(y); + protein.setZ(zIndex++); + protein.setWidth(width); + protein.setHeight(height); + protein.setNameX(x); + protein.setNameY(y); + protein.setNameWidth(width); + protein.setNameHeight(height); + protein.setNameVerticalAlign(VerticalAlign.MIDDLE); + protein.setNameHorizontalAlign(HorizontalAlign.CENTER); + } + protected UploadedFileEntry createFile(String content, User user) { return createFile(content.getBytes(), user); } diff --git a/web/src/test/java/lcsb/mapviewer/web/UserControllerIntegrationTestWithoutTransaction.java b/web/src/test/java/lcsb/mapviewer/web/UserControllerIntegrationTestWithoutTransaction.java index 6e83ec86f..36a8a8f1d 100644 --- a/web/src/test/java/lcsb/mapviewer/web/UserControllerIntegrationTestWithoutTransaction.java +++ b/web/src/test/java/lcsb/mapviewer/web/UserControllerIntegrationTestWithoutTransaction.java @@ -1,6 +1,7 @@ package lcsb.mapviewer.web; -import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -23,8 +24,6 @@ import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.servlet.RequestBuilder; -import lcsb.mapviewer.model.user.User; -import lcsb.mapviewer.model.user.UserGuiPreference; import lcsb.mapviewer.services.interfaces.IUserService; @RunWith(SpringJUnit4ClassRunner.class) -- GitLab From 90a6033a141bf7d771a3ea8dbb01d30374d42b16 Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Mon, 17 Aug 2020 09:14:41 +0200 Subject: [PATCH 2/9] it's name point coordinates not global --- .../model/celldesigner/alias/CompartmentAliasXmlParser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParser.java index dd133652a..67bca3873 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/alias/CompartmentAliasXmlParser.java @@ -165,8 +165,8 @@ public class CompartmentAliasXmlParser extends AbstractAliasXmlParser Date: Mon, 17 Aug 2020 09:15:08 +0200 Subject: [PATCH 3/9] check null only once --- .../converter/model/sbml/species/SbmlSpeciesParser.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java index 42073efdd..7a32567a5 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParser.java @@ -449,13 +449,10 @@ public class SbmlSpeciesParser extends SbmlElementParser if (element.getNameY() == null) { element.setNameY(element.getY()); } - if (element.getNameWidth() == null) { + if (element.getNameWidth() == null || element.getNameHeight() == null) { element.setNameWidth(element.getWidth() - (element.getNameX() - element.getX())); element.setNameHeight(element.getHeight() - (element.getNameY() - element.getY())); } - if (element.getNameX() == null) { - element.setNameX(element.getX()); - } if (element.getNameHorizontalAlign() == null) { element.setNameHorizontalAlign(HorizontalAlign.CENTER); } -- GitLab From 6e1b429b4d4713f1f257623e40b93b82923b13b6 Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Mon, 17 Aug 2020 09:30:04 +0200 Subject: [PATCH 4/9] sbgnml did not export text label border properly --- .../converter/model/sbgnml/SbgnmlXmlExporter.java | 6 ++++++ .../mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java | 7 +++++-- .../converter/model/sbgnml/SbgnmlSerializationTest.java | 2 +- .../converter/model/sbgnml/SbgnmlXmlExporterTest.java | 1 + 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlExporter.java b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlExporter.java index a6a92d6b9..62eb8107f 100644 --- a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlExporter.java +++ b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlExporter.java @@ -494,6 +494,12 @@ public class SbgnmlXmlExporter { private Label getGlyphLabelFromAlias(Element element) { Label label = new Label(); label.setText(element.getName()); + Bbox box = new Bbox(); + box.setX(element.getNameX().floatValue()); + box.setY(element.getNameY().floatValue()); + box.setW(element.getNameWidth().floatValue()); + box.setH(element.getNameHeight().floatValue()); + label.setBbox(box); return label; } diff --git a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java index d25d8b28e..1f4b91864 100644 --- a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java +++ b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlParser.java @@ -766,9 +766,12 @@ public class SbgnmlXmlParser { newSpecies.setNameWidth(g.getLabel().getBbox().getW()); newSpecies.setNameHeight(g.getLabel().getBbox().getH()); newSpecies.setNameHorizontalAlign(HorizontalAlign.CENTER); - newSpecies.setNameVerticalAlign(VerticalAlign.MIDDLE); + if (newSpecies instanceof Complex) { + newSpecies.setNameVerticalAlign(VerticalAlign.BOTTOM); + } else { + newSpecies.setNameVerticalAlign(VerticalAlign.MIDDLE); + } } - } else { newSpecies.setName(""); } diff --git a/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlSerializationTest.java b/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlSerializationTest.java index 003fd579a..de2afb46a 100644 --- a/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlSerializationTest.java +++ b/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlSerializationTest.java @@ -80,7 +80,7 @@ public class SbgnmlSerializationTest extends SbgnmlTestFunctions { e.setPositionToCompartment(null); } - assertEquals("Import/export shouldn't produce any wanrnings", 0, super.getWarnings().size()); + assertEquals("Import/export shouldn't produce any warnings", 0, super.getWarnings().size()); ModelComparator mc = new ModelComparator(0.001); assertEquals(0, mc.compare(model, model2)); } diff --git a/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlExporterTest.java b/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlExporterTest.java index 1b47c35a3..e9bc34df2 100644 --- a/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlExporterTest.java +++ b/converter-SBGNML/src/test/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlExporterTest.java @@ -118,6 +118,7 @@ public class SbgnmlXmlExporterTest extends SbgnmlTestFunctions { ion.setHeight(100); ion.setX(200 * (id % 2 + 1)); ion.setY(50 * (id / 2 + 1)); + ion.setNameBorder(ion.getBorder()); ion.setOnlySubstanceUnits(true); ion.setConstant(true); ion.setInitialAmount(2.0); -- GitLab From 47c90381ea3587052a4c467d94042e094ef70c77 Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Mon, 17 Aug 2020 09:40:31 +0200 Subject: [PATCH 5/9] serialization over celldesigner does not prevent dimension of text label --- .../converter/model/sbml/MultiParserTest.java | 7 +------ .../converter/model/sbml/SbmlTestFunctions.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/MultiParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/MultiParserTest.java index e7a310b61..bfbbb4764 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/MultiParserTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/MultiParserTest.java @@ -63,12 +63,7 @@ public class MultiParserTest extends SbmlTestFunctions { String pngFilePath = pathWithouExtension.concat(".png"); nig.saveToFile(pngFilePath); - CellDesignerXmlParser cellDesignerXmlParser = new CellDesignerXmlParser(); - String xmlString = cellDesignerXmlParser.model2String(model); - - InputStream is = new ByteArrayInputStream(xmlString.getBytes("UTF-8")); - - Model model2 = cellDesignerXmlParser.createModel(new ConverterParams().inputStream(is).sizeAutoAdjust(false)); + Model model2 = super.getModelAfterCellDEsignerSerializing(model); AbstractImageGenerator.Params params2 = new AbstractImageGenerator.Params().height(model2.getHeight()) .width(model2.getWidth()).nested(true).scale(1).level(20).x(0).y(0).model(model2); diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlTestFunctions.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlTestFunctions.java index cce6d49e8..e5a05595a 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlTestFunctions.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlTestFunctions.java @@ -158,10 +158,16 @@ public class SbmlTestFunctions { Model model2 = parser.createModel(new ConverterParams().inputStream(is).sizeAutoAdjust(false)); for (BioEntity bioEntity : model2.getBioEntities()) { - bioEntity.setZ(null); + bioEntity.setZ(0); + if (bioEntity instanceof Element) { + ((Element) bioEntity).setNameBorder(((Element) bioEntity).getBorder()); + } } for (BioEntity bioEntity : model.getBioEntities()) { - bioEntity.setZ(null); + bioEntity.setZ(0); + if (bioEntity instanceof Element) { + ((Element) bioEntity).setNameBorder(((Element) bioEntity).getBorder()); + } } return model2; } -- GitLab From a25ceafa9d16a3c98918af6909738c3180a5d1dc Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Mon, 17 Aug 2020 13:39:03 +0200 Subject: [PATCH 6/9] CellDesiogner does not alow to serialize label width/height --- .../mapviewer/wikipathway/GPMLToModelTest.java | 1 + .../wikipathway/WikipathwaysTestFunctions.java | 8 +++++--- .../wikipathway/XML/ModelToGPMLTest.java | 4 ++++ pathvisio/src/test/resources/log4j2.properties | 16 ++++++++-------- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java index 130ae194e..d42b6b37b 100644 --- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java +++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java @@ -263,6 +263,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions { String fileName = "testFiles/compartment/complex_in_compartment.gpml"; Model model1 = new GPMLToModel().getModel(fileName); assertEquals(2, getWarnings().size()); + Model model2 = serializeModelOverCellDesignerParser(model1); diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java index 338c834e7..d9daac0b0 100644 --- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java +++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java @@ -248,9 +248,11 @@ public abstract class WikipathwaysTestFunctions { String xml = parser.model2String(model1); InputStream is = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)); - for (Species bioEntity : model1.getSpeciesList()) { + for (lcsb.mapviewer.model.map.species.Element bioEntity : model1.getElements()) { // CellDesigner doesn't allow to store border color - bioEntity.setBorderColor(Color.BLACK); + if (bioEntity instanceof Species) { + bioEntity.setBorderColor(Color.BLACK); + } // CellDesigner doesn't allow to store name point position bioEntity.setNameX(0); bioEntity.setNameY(0); @@ -261,7 +263,7 @@ public abstract class WikipathwaysTestFunctions { } Model model2 = parser.createModel(new ConverterParams().inputStream(is).sizeAutoAdjust(false)); - for (Species bioEntity : model2.getSpeciesList()) { + for (lcsb.mapviewer.model.map.species.Element bioEntity : model2.getElements()) { // CellDesigner doesn't allow to store name point position bioEntity.setNameX(0); bioEntity.setNameY(0); diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelToGPMLTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelToGPMLTest.java index 173a70170..40ed5e780 100644 --- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelToGPMLTest.java +++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelToGPMLTest.java @@ -295,6 +295,8 @@ public class ModelToGPMLTest extends WikipathwaysTestFunctions { Complex complex = new Complex("sa" + (speciesCounter++)); complex.setName("s2"); super.assignCoordinates(1, 1, 10, 10, complex); + complex.setNameHeight(complex.getHeight()-2); + complex.setNameVerticalAlign(VerticalAlign.BOTTOM); complex.setHypothetical(true); return complex; } @@ -303,6 +305,8 @@ public class ModelToGPMLTest extends WikipathwaysTestFunctions { Compartment compartment = new SquareCompartment("ca" + (speciesCounter++)); compartment.setName("s2"); super.assignCoordinates(1, 1, 10, 10, compartment); + compartment.setNameHorizontalAlign(HorizontalAlign.LEFT); + compartment.setNameVerticalAlign(VerticalAlign.TOP); compartment.setThickness(0); compartment.setOuterWidth(0); compartment.setInnerWidth(0); diff --git a/pathvisio/src/test/resources/log4j2.properties b/pathvisio/src/test/resources/log4j2.properties index 732727bda..103d3992a 100644 --- a/pathvisio/src/test/resources/log4j2.properties +++ b/pathvisio/src/test/resources/log4j2.properties @@ -12,14 +12,14 @@ rootLogger.appenderRef.console.ref = STDOUT logger.minerva.name = lcsb logger.minerva.level = debug -#logger.minerva-persist.name = lcsb.mapviewer.persist.DbUtils -#logger.minerva-persist.level = info -#logger.minerva-cache.name = lcsb.mapviewer.annotation.cache -#logger.minerva-cache.level = info -#logger.minerva-comparator.name = lcsb.mapviewer.common.Comparator -#logger.minerva-comparator.level = info -#logger.minerva-model.name = lcsb.mapviewer.model -#logger.minerva-model.level = info +logger.minerva-persist.name = lcsb.mapviewer.persist.DbUtils +logger.minerva-persist.level = info +logger.minerva-cache.name = lcsb.mapviewer.annotation.cache +logger.minerva-cache.level = info +logger.minerva-comparator.name = lcsb.mapviewer.common.Comparator +logger.minerva-comparator.level = info +logger.minerva-model.name = lcsb.mapviewer.model +logger.minerva-model.level = info logger.springframework.name = org.springframework logger.springframework.level = warn -- GitLab From 9b0c5666d96c37133e16928acde36ee3d3e2e463 Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Mon, 17 Aug 2020 14:58:29 +0200 Subject: [PATCH 7/9] text alignment with TOP align was incorrect --- .../bioEntity/element/species/SpeciesConverter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java index c184e3845..fa7fe14e0 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java @@ -220,20 +220,20 @@ public abstract class SpeciesConverter extends ElementConvert */ protected void drawText(final Rectangle2D border, final String text, final Graphics2D graphics, HorizontalAlign horizontalAlign, VerticalAlign verticalAlign) { - double height = getTextHeight(text, graphics); + double textHeight = getTextHeight(text, graphics); double y = border.getY(); String[] lines = text.split("\n"); double lineHeight = graphics.getFontMetrics().getHeight(); switch (verticalAlign) { case TOP: - y = border.getMinY(); + y = border.getMinY() + graphics.getFontMetrics().getAscent(); break; case MIDDLE: - y = border.getCenterY() - (height / 2 - graphics.getFontMetrics().getAscent()); + y = border.getCenterY() - (textHeight / 2 - graphics.getFontMetrics().getAscent()); break; case BOTTOM: - y = border.getMaxY() - (height - graphics.getFontMetrics().getAscent()); + y = border.getMaxY() - (textHeight - graphics.getFontMetrics().getAscent()); break; default: throw new InvalidArgumentException("Don't know how to align text with: " + verticalAlign); -- GitLab From 645dea95bf9b0528790728711212f0a49803fd2e Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Mon, 17 Aug 2020 15:03:57 +0200 Subject: [PATCH 8/9] default text align for species should be centered --- .../converter/model/sbml/SbmlElementParser.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementParser.java index fabc2d2c8..3124ed76d 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlElementParser.java @@ -17,6 +17,7 @@ import lcsb.mapviewer.model.LogMarker; import lcsb.mapviewer.model.ProjectLogEntryType; import lcsb.mapviewer.model.graphics.HorizontalAlign; import lcsb.mapviewer.model.graphics.VerticalAlign; +import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.species.Element; public abstract class SbmlElementParser extends SbmlBioEntityParser { @@ -114,8 +115,12 @@ public abstract class SbmlElementParser extends source.setNameY(box.getPosition().getY()); source.setNameWidth(box.getDimensions().getWidth()); source.setNameHeight(box.getDimensions().getHeight()); - source.setNameHorizontalAlign(HorizontalAlign.LEFT); - source.setNameVerticalAlign(VerticalAlign.TOP); + source.setNameHorizontalAlign(HorizontalAlign.CENTER); + source.setNameVerticalAlign(VerticalAlign.MIDDLE); + if (source instanceof Compartment) { + source.setNameHorizontalAlign(HorizontalAlign.LEFT); + source.setNameVerticalAlign(VerticalAlign.TOP); + } LocalStyle style = getStyleForGlyph(textGlyph); if (style != null) { RenderGroup group = style.getGroup(); -- GitLab From d91725057b5f106a6bcae008f191903527c2715a Mon Sep 17 00:00:00 2001 From: Piotr Gawron Date: Mon, 17 Aug 2020 15:07:00 +0200 Subject: [PATCH 9/9] changelog updated --- CHANGELOG | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index cc42b4dca..d91b3df96 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +minerva (15.1.0~beta.1) unstable; urgency=medium + * Bug fix: SBML import - label aligned to top of species was inproperly drawn + (#1354) + + -- Piotr Gawron Mon, 17 Aug 2020 16:00:00 +0200 + minerva (15.1.0~beta.0) unstable; urgency=medium * Small improvement: annotations are exported in SBGN extension that can be opened by newt (#1296) -- GitLab