Skip to content
Snippets Groups Projects
Commit 9d3bed38 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

Merge branch '327-allow-for-color-and-line-thickness-control-in-the-generated-layout' into 'master'

Resolve partially "Allow for color and line thickness control in the generated layout"

See merge request piotr.gawron/minerva!243
parents ec77189d 4f187f25
No related branches found
No related tags found
1 merge request!243Resolve partially "Allow for color and line thickness control in the generated layout"
Pipeline #
......@@ -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;
}
}
......@@ -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 {
......
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;
}
}
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());
}
}
......@@ -149,6 +149,7 @@ public class ApplySimpleLayoutModelCommand extends ApplyLayoutModelCommand {
compartment.setY(minPoint.getY() + COMPARTMENT_BORDER);
compartment.setWidth(dimension.getWidth() - COMPARTMENT_BORDER * 2);
compartment.setHeight(dimension.getHeight() - COMPARTMENT_BORDER * 2);
compartment.setNamePoint(minPoint.getX() + COMPARTMENT_BORDER * 2, minPoint.getY() + COMPARTMENT_BORDER * 2);
Point2D point = new Point2D.Double(minPoint.getX() + COMPARTMENT_BORDER, minPoint.getY() + COMPARTMENT_BORDER);
Dimension2D recursiveDimension = new DoubleDimension(dimension.getWidth() - COMPARTMENT_BORDER * 2,
dimension.getHeight() - COMPARTMENT_BORDER * 2);
......@@ -218,7 +219,7 @@ public class ApplySimpleLayoutModelCommand extends ApplyLayoutModelCommand {
Point2D middle = getMiddlePoint(productElement.getCenter(), reactantElement.getCenter());
//for self reactions
// for self reactions
if (productElement.equals(reactantElement)) {
middle.setLocation(middle.getX(), middle.getY() + 50);
}
......
......@@ -28,6 +28,7 @@
<h:outputStylesheet library="css" name="style.css" />
<h:outputStylesheet library="css" name="minerva.css" />
<h:outputStylesheet library="css" name="admin.css" />
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"/>
<script type="text/javascript">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment