From 3136d0b6609706c6bf421a5fc793c8acc63267b6 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Tue, 20 Mar 2018 17:07:53 +0100 Subject: [PATCH] default colors added --- .../common/geometry/ColorParser.java | 105 +++++++++--------- .../model/sbml/SbmlBioEntityParser.java | 7 ++ .../model/sbml/species/ElementColorEnum.java | 81 ++++++++++++++ .../sbml/species/SbmlSpeciesParserTest.java | 18 ++- 4 files changed, 159 insertions(+), 52 deletions(-) create mode 100644 converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/ElementColorEnum.java diff --git a/commons/src/main/java/lcsb/mapviewer/common/geometry/ColorParser.java b/commons/src/main/java/lcsb/mapviewer/common/geometry/ColorParser.java index f78e460818..76ee7ad305 100644 --- a/commons/src/main/java/lcsb/mapviewer/common/geometry/ColorParser.java +++ b/commons/src/main/java/lcsb/mapviewer/common/geometry/ColorParser.java @@ -14,61 +14,64 @@ import lcsb.mapviewer.common.exception.InvalidArgumentException; */ public class ColorParser { - /** - * Base of the hex representation. - */ - private static final int HEX_BASE = 16; + /** + * Base of the hex representation. + */ + private static final int HEX_BASE = 16; - /** - * Length of the string describing color in rgb: "#RRGGBB". - */ - private static final int COLOR_STRING_LENGTH = 7; + /** + * Length of the string describing color in RGB: "#RRGGBB". + */ + private static final int COLOR_STRING_LENGTH = 7; - /** - * Where starts description of red color in stirng representing color. - */ - private static final int COLOR_SUBSTRING_START_RED = 1; + /** + * Where starts description of red color in string representing color. + */ + private static final int COLOR_SUBSTRING_START_RED = 1; - /** - * Where starts description of green color in stirng representing color. - */ - private static final int COLOR_SUBSTRING_START_GREEN = 3; + /** + * Where starts description of green color in string representing color. + */ + private static final int COLOR_SUBSTRING_START_GREEN = 3; - /** - * Where starts description of blue color in stirng representing color. - */ - private static final int COLOR_SUBSTRING_START_BLUE = 5; + /** + * Where starts description of blue color in string representing color. + */ + private static final int COLOR_SUBSTRING_START_BLUE = 5; - /** - * Extracts {@link Color} from input {@link String}. - * - * @param string - * text to process - * @return {@link Color} obtained from input text - */ - public Color parse(String string) { - if (string.charAt(0) != '#') { - string = "#" + string; - } - if (string.length() != COLOR_STRING_LENGTH) { - throw new InvalidArgumentException("Invalid color value: " + string + ". Correct format: #xxxxxx (where x is a hex value)"); - } else { - return new Color(Integer.valueOf(string.substring(COLOR_SUBSTRING_START_RED, COLOR_SUBSTRING_START_GREEN), HEX_BASE), // - Integer.valueOf(string.substring(COLOR_SUBSTRING_START_GREEN, COLOR_SUBSTRING_START_BLUE), HEX_BASE), // - Integer.valueOf(string.substring(COLOR_SUBSTRING_START_BLUE, COLOR_STRING_LENGTH), HEX_BASE)); - } - } + /** + * Extracts {@link Color} from input {@link String}. + * + * @param string + * text to process + * @return {@link Color} obtained from input text + */ + public Color parse(String string) { + if (string.charAt(0) != '#') { + string = "#" + string; + } + if (string.length() != COLOR_STRING_LENGTH) { + throw new InvalidArgumentException( + "Invalid color value: " + string + ". Correct format: #xxxxxx (where x is a hex value)"); + } else { + return new Color( + Integer.valueOf(string.substring(COLOR_SUBSTRING_START_RED, COLOR_SUBSTRING_START_GREEN), HEX_BASE), // + Integer.valueOf(string.substring(COLOR_SUBSTRING_START_GREEN, COLOR_SUBSTRING_START_BLUE), HEX_BASE), // + Integer.valueOf(string.substring(COLOR_SUBSTRING_START_BLUE, COLOR_STRING_LENGTH), HEX_BASE)); + } + } - /** - * Converts color into list of atributes. - * - * @param color color to convert - * @return map with list of color attributes - */ - public Map<String, Object> colorToMap(Color color) { - Map<String, Object> result = new HashMap<>(); - result.put("alpha", color.getAlpha()); - result.put("rgb", color.getRGB()); - return result; - } + /** + * Converts color into list of attributes. + * + * @param color + * color to convert + * @return map with list of color attributes + */ + public Map<String, Object> colorToMap(Color color) { + Map<String, Object> result = new HashMap<>(); + result.put("alpha", color.getAlpha()); + result.put("rgb", color.getRGB()); + return result; + } } diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityParser.java index 7ba0246982..e9926b9ed9 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityParser.java @@ -15,8 +15,10 @@ import lcsb.mapviewer.common.XmlParser; import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; import lcsb.mapviewer.converter.InvalidInputDataExecption; import lcsb.mapviewer.converter.annotation.XmlAnnotationParser; +import lcsb.mapviewer.converter.model.sbml.species.ElementColorEnum; import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.MiriamData; +import lcsb.mapviewer.model.map.species.Element; public class SbmlBioEntityParser extends XmlParser { Logger logger = Logger.getLogger(SbmlBioEntityParser.class); @@ -55,6 +57,11 @@ public class SbmlBioEntityParser extends XmlParser { } String notes = extractNotes(sbmlElement); result.setNotes(notes); + + if (result instanceof Element) { + Element element = (Element) result; + element.setColor(ElementColorEnum.getColorByClass(element.getClass())); + } } private String extractNotes(AbstractNamedSBase sbmlElement) throws InvalidInputDataExecption { diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/ElementColorEnum.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/ElementColorEnum.java new file mode 100644 index 0000000000..7dd12ee398 --- /dev/null +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/ElementColorEnum.java @@ -0,0 +1,81 @@ +package lcsb.mapviewer.converter.model.sbml.species; + +import java.awt.Color; + +import lcsb.mapviewer.common.geometry.ColorParser; +import lcsb.mapviewer.model.map.compartment.OvalCompartment; +import lcsb.mapviewer.model.map.compartment.SquareCompartment; +import lcsb.mapviewer.model.map.species.AntisenseRna; +import lcsb.mapviewer.model.map.species.Complex; +import lcsb.mapviewer.model.map.species.Degraded; +import lcsb.mapviewer.model.map.species.Drug; +import lcsb.mapviewer.model.map.species.Element; +import lcsb.mapviewer.model.map.species.Gene; +import lcsb.mapviewer.model.map.species.GenericProtein; +import lcsb.mapviewer.model.map.species.Ion; +import lcsb.mapviewer.model.map.species.IonChannelProtein; +import lcsb.mapviewer.model.map.species.Phenotype; +import lcsb.mapviewer.model.map.species.ReceptorProtein; +import lcsb.mapviewer.model.map.species.Rna; +import lcsb.mapviewer.model.map.species.SimpleMolecule; +import lcsb.mapviewer.model.map.species.TruncatedProtein; +import lcsb.mapviewer.model.map.species.Unknown; + +public enum ElementColorEnum { + ANTISENSE_RNA(AntisenseRna.class, "#ff6666"), // + COMPLEX(Complex.class, "#f7f7f7"), // + DEGRADED(Degraded.class, "#ffcccc"), // + DRUG(Drug.class, "#ff00ff"), // + ELEMENT(Element.class, "#000000"), // + GENE(Gene.class, "#ffff66"), // + GENERIC_PROTEIN(GenericProtein.class, "ccffcc"), // + TRUNCATED_PROTEIN(TruncatedProtein.class, "#ffcccc"), // + ION(Ion.class, "#9999ff"), // + ION_CHANNEL(IonChannelProtein.class, "#ccffff"), // + OVAL_COMPARTMENT(OvalCompartment.class, "#cccc00"), // + PHENOTYPE(Phenotype.class, "#cc99ff"), // + RECEPTOR(ReceptorProtein.class, "#ffffcc"), // + RNA(Rna.class, "#66ff66"), // + SIMPLE_MOLECULE(SimpleMolecule.class, "#ccff66"), // + SQUARE_COMPARTMENT(SquareCompartment.class, "#cccc00"), // + UNKNOWN(Unknown.class, "#cccccc"), // + ; + + private Class<? extends Element> clazz; + private Color color; + + ColorParser colorParser = new ColorParser(); + + private ElementColorEnum(Class<? extends Element> clazz, String color) { + this.clazz = clazz; + if (color != null) { + this.color = colorParser.parse(color); + } + } + + public static Color getColorByClass(Class<? extends Element> clazz) { + Color result = null; + for (ElementColorEnum type : ElementColorEnum.values()) { + if (type.getClazz().equals(clazz)) { + result = type.getColor(); + } + } + if (result == null) { + for (ElementColorEnum type : ElementColorEnum.values()) { + if (type.getClazz().isAssignableFrom(clazz)) { + result = type.getColor(); + } + } + } + return result; + } + + public Class<? extends Element> getClazz() { + return clazz; + } + + public Color getColor() { + return color; + } + +} diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java index 2a049eecec..3951251a80 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java @@ -1,5 +1,6 @@ package lcsb.mapviewer.converter.model.sbml.species; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.FileNotFoundException; @@ -7,6 +8,7 @@ import java.io.FileNotFoundException; import org.apache.log4j.Logger; import org.junit.Test; +import lcsb.mapviewer.common.geometry.ColorParser; import lcsb.mapviewer.converter.ConverterParams; import lcsb.mapviewer.converter.InvalidInputDataExecption; import lcsb.mapviewer.converter.model.sbml.SbmlParser; @@ -30,11 +32,14 @@ public class SbmlSpeciesParserTest { Logger logger = Logger.getLogger(SbmlSpeciesParserTest.class); SbmlParser parser = new SbmlParser(); + ColorParser colorParser = new ColorParser(); + @Test public void testParseAntisenseRna() throws FileNotFoundException, InvalidInputDataExecption { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/antisense_rna.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof AntisenseRna); + assertEquals(ElementColorEnum.ANTISENSE_RNA.getColor(), element.getColor()); } @Test @@ -42,6 +47,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/complex.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof Complex); + assertEquals(ElementColorEnum.COMPLEX.getColor(), element.getColor()); } @Test @@ -49,6 +55,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/degraded.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof Degraded); + assertEquals(ElementColorEnum.DEGRADED.getColor(), element.getColor()); } @Test @@ -56,6 +63,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/drug.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof Drug); + assertEquals(ElementColorEnum.DRUG.getColor(), element.getColor()); } @Test @@ -63,6 +71,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/gene.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof Gene); + assertEquals(ElementColorEnum.GENE.getColor(), element.getColor()); } @Test @@ -70,6 +79,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/generic_protein.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof GenericProtein); + assertEquals(ElementColorEnum.GENERIC_PROTEIN.getColor(), element.getColor()); } @Test @@ -77,6 +87,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/ion_channel.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof IonChannelProtein); + assertEquals(ElementColorEnum.ION_CHANNEL.getColor(), element.getColor()); } @Test @@ -84,6 +95,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/ion.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof Ion); + assertEquals(ElementColorEnum.ION.getColor(), element.getColor()); } @Test @@ -91,6 +103,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/phenotype.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof Phenotype); + assertEquals(ElementColorEnum.PHENOTYPE.getColor(), element.getColor()); } @Test @@ -98,6 +111,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/receptor.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof ReceptorProtein); + assertEquals(ElementColorEnum.RECEPTOR.getColor(), element.getColor()); } @Test @@ -105,6 +119,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/rna.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof Rna); + assertEquals(ElementColorEnum.RNA.getColor(), element.getColor()); } @Test @@ -112,6 +127,7 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/small_molecule.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof SimpleMolecule); + assertEquals(ElementColorEnum.SIMPLE_MOLECULE.getColor(), element.getColor()); } @Test @@ -126,6 +142,6 @@ public class SbmlSpeciesParserTest { Model model = parser.createModel(new ConverterParams().filename("testFiles/small/unknown_species.xml")); Element element = model.getElementByElementId("s1"); assertTrue(element instanceof Unknown); + assertEquals(ElementColorEnum.UNKNOWN.getColor(), element.getColor()); } - } -- GitLab