From 2d8b3e82bba04ee8fff0d1d05d7bb8cff38f5c2f Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 2 Feb 2018 16:31:34 +0100 Subject: [PATCH] kinetics equation can contain compartment id --- .../CellDesignerElementCollection.java | 6 +- .../alias/CompartmentAliasXmlParser.java | 317 ++++----- .../alias/ComplexAliasXmlParser.java | 1 + .../alias/SpeciesAliasXmlParser.java | 442 ++++++------ .../reaction/ReactionFromXml.java | 26 +- .../reaction/ReactionXmlParser.java | 6 +- .../structure/CellDesignerElement.java | 6 +- .../alias/AliasCollectionXmlParserTest.java | 641 +++++++++--------- .../alias/CompartmentAliasXmlParserTest.java | 461 +++++++------ .../alias/ComplexAliasXmlParserTest.java | 119 ++-- .../alias/SpeciesAliasXmlParserTest.java | 594 ++++++++-------- .../reaction/ReactionFromXmlTest.java | 18 +- .../reaction/ReactionParserTests.java | 12 + .../reactions/kinetics_with_compartment.xml | 189 ++++++ .../mapviewer/model/map/species/Element.java | 2 +- 15 files changed, 1558 insertions(+), 1282 deletions(-) create mode 100644 converter-CellDesigner/testFiles/reactions/kinetics_with_compartment.xml diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerElementCollection.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerElementCollection.java index 1eb8a39ac4..6857681265 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerElementCollection.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerElementCollection.java @@ -155,7 +155,7 @@ public class CellDesignerElementCollection { } } - // identifier that distinguish elements in sbml depends only on type, + // identifier that distinguish elements in SBML depends only on type, // name, compartment, modifications, homodimer, state, complex where it's // located, // children of the complex @@ -216,7 +216,7 @@ public class CellDesignerElementCollection { * @param id * id that should be used for identifying element */ - private void addElement(CellDesignerElement<?> element, String id) { + public void addElement(CellDesignerElement<?> element, String id) { if (elementById.get(id) != null) { throw new InvalidArgumentException( "[" + element.getClass().getSimpleName() + " " + element.getElementId() + "]\t" + "Element with given id alread exists. ID: " + id); @@ -233,7 +233,7 @@ public class CellDesignerElementCollection { * @param element * element to be added */ - public void addModelElement(Species modelElement, CellDesignerElement<?> element) { + public void addModelElement(Element modelElement, CellDesignerElement<?> element) { addElement(element, getElementId(modelElement)); if (getElementByElementId(element.getElementId()) == null) { addElement(element); 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 f3a8bf8492..bb923a34ce 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 @@ -26,162 +26,165 @@ import lcsb.mapviewer.model.map.model.Model; */ public class CompartmentAliasXmlParser extends AbstractAliasXmlParser<Compartment> { - /** - * Default class logger. - */ - @SuppressWarnings("unused") - private Logger logger = Logger.getLogger(CompartmentAliasXmlParser.class.getName()); - - /** - * Model for which we are parsing aliases. - */ - private Model model = null; - - /** - * Collection of {@link CellDesignerElement cell designer elements} parsed - * from xml. - */ - private CellDesignerElementCollection elements; - - /** - * Default constructor. - * - * @param elements - * collection of {@link CellDesignerElement cell designer elements} - * parsed from xml - * @param model - * model for which this parser will be used - */ - public CompartmentAliasXmlParser(CellDesignerElementCollection elements, Model model) { - this.model = model; - this.elements = elements; - } - - @Override - Compartment parseXmlAlias(Node aliasNode) throws InvalidXmlSchemaException { - - String compartmentId = getNodeAttr("compartment", aliasNode); - CellDesignerCompartment compartment = elements.getElementByElementId(compartmentId); - if (compartment == null) { - throw new InvalidXmlSchemaException("Compartment does not exist in a model: " + compartmentId); - } - String aliasId = getNodeAttr("id", aliasNode); - Compartment result = compartment.createModelElement(aliasId); - - NodeList nodes = aliasNode.getChildNodes(); - for (int i = 0; i < nodes.getLength(); i++) { - Node node = nodes.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) { - if (node.getNodeName().equalsIgnoreCase("celldesigner:class")) { - String type = getNodeValue(node); - if (type.equalsIgnoreCase("SQUARE")) { - result = new SquareCompartment(result); - } else if (type.equalsIgnoreCase("SQUARE_CLOSEUP_NORTH")) { - result = new BottomSquareCompartment(result, model); - } else if (type.equalsIgnoreCase("SQUARE_CLOSEUP_SOUTH")) { - result = new TopSquareCompartment(result, model); - } else if (type.equalsIgnoreCase("SQUARE_CLOSEUP_WEST")) { - result = new RightSquareCompartment(result, model); - } else if (type.equalsIgnoreCase("SQUARE_CLOSEUP_EAST")) { - result = new LeftSquareCompartment(result, model); - } else if (type.equalsIgnoreCase("OVAL")) { - result = new OvalCompartment(result); - } else { - throw new InvalidXmlSchemaException("Unknown compartment type: " + type); - } - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:bounds")) { - result.setX(getNodeAttr("x", node)); - result.setY(getNodeAttr("y", node)); - result.setWidth(getNodeAttr("w", node)); - result.setHeight(getNodeAttr("h", node)); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:doubleLine")) { - result.setLineThickness(getNodeAttr("thickness", node)); - result.setLineOuterWidth(getNodeAttr("outerWidth", node)); - result.setLineInnerWidth(getNodeAttr("innerWidth", node)); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:paint")) { - result.setColor(getCommonParser().getColor(node)); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:info")) { - // not handled - continue; - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:point")) { - if (result instanceof BottomSquareCompartment) { - result.setY(getNodeAttr("y", node)); - } else if (result instanceof LeftSquareCompartment) { - result.setX(getNodeAttr("x", node)); - } else if (result instanceof RightSquareCompartment) { - result.setX(getNodeAttr("x", node)); - result.setWidth(result.getWidth() - result.getX()); - } else if (result instanceof TopSquareCompartment) { - result.setY(getNodeAttr("y", node)); - } else { - throw new InvalidXmlSchemaException("Don't know what to do with celldesigner:point for class: " + result.getClass()); - } - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:namePoint")) { - result.setNamePoint(getCommonParser().getPosition(node)); - } else { - throw new InvalidXmlSchemaException("Unknown element of celldesigner:compartmentAlias: " + node.getNodeName()); - } - } - } - return result; - } - - @Override - public String toXml(Compartment compartment) { - StringBuilder sb = new StringBuilder(""); - - sb.append("<celldesigner:compartmentAlias "); - sb.append("id=\"" + compartment.getElementId() + "\" "); - sb.append("compartment=\"" + elements.getElementId(compartment) + "\">\n"); - - boolean bounds = true; - - if (compartment.getClass().getName().equals(SquareCompartment.class.getName())) { - sb.append("<celldesigner:class>SQUARE</celldesigner:class>\n"); - } else if (compartment.getClass().getName().equals(OvalCompartment.class.getName())) { - sb.append("<celldesigner:class>OVAL</celldesigner:class>\n"); - } else if (compartment.getClass().getName().equals(BottomSquareCompartment.class.getName())) { - sb.append("<celldesigner:class>SQUARE_CLOSEUP_NORTH</celldesigner:class>\n"); - bounds = false; - sb.append("<celldesigner:point x=\"10\" y=\"" + compartment.getY() + "\"/>"); - } else if (compartment.getClass().getName().equals(TopSquareCompartment.class.getName())) { - sb.append("<celldesigner:class>SQUARE_CLOSEUP_SOUTH</celldesigner:class>\n"); - bounds = false; - sb.append("<celldesigner:point x=\"10\" y=\"" + compartment.getY() + "\"/>"); - } else if (compartment.getClass().getName().equals(LeftSquareCompartment.class.getName())) { - sb.append("<celldesigner:class>SQUARE_CLOSEUP_EAST</celldesigner:class>\n"); - bounds = false; - sb.append("<celldesigner:point x=\"" + compartment.getWidth() + "\" y=\"10\"/>"); - } else if (compartment.getClass().getName().equals(RightSquareCompartment.class.getName())) { - sb.append("<celldesigner:class>SQUARE_CLOSEUP_WEST</celldesigner:class>\n"); - bounds = false; - sb.append("<celldesigner:point x=\"" + compartment.getX() + "\" y=\"10\"/>"); - } else { - throw new NotImplementedException("Unknown compartment class: " + compartment.getClass()); - } - if (bounds) { - sb.append("<celldesigner:bounds "); - sb.append("x=\"" + compartment.getX() + "\" "); - sb.append("y=\"" + compartment.getY() + "\" "); - sb.append("w=\"" + compartment.getWidth() + "\" "); - sb.append("h=\"" + compartment.getHeight() + "\"/>\n"); - } - - sb.append("<celldesigner:namePoint "); - sb.append("x=\"" + compartment.getNamePoint().getX() + "\" "); - sb.append("y=\"" + compartment.getNamePoint().getY() + "\"/>\n"); - - sb.append("<celldesigner:doubleLine "); - sb.append("thickness=\"" + compartment.getThickness() + "\" "); - sb.append("outerWidth=\"" + compartment.getOuterWidth() + "\" "); - sb.append("innerWidth=\"" + compartment.getInnerWidth() + "\"/>\n"); - - sb.append("<celldesigner:paint "); - sb.append("color=\"" + colorToString(compartment.getColor()) + "\" scheme=\"Color\"/>\n"); - - sb.append("</celldesigner:compartmentAlias>\n"); - - return sb.toString(); - } + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private Logger logger = Logger.getLogger(CompartmentAliasXmlParser.class.getName()); + + /** + * Model for which we are parsing aliases. + */ + private Model model = null; + + /** + * Collection of {@link CellDesignerElement cell designer elements} parsed from + * xml. + */ + private CellDesignerElementCollection elements; + + /** + * Default constructor. + * + * @param elements + * collection of {@link CellDesignerElement cell designer elements} + * parsed from xml + * @param model + * model for which this parser will be used + */ + public CompartmentAliasXmlParser(CellDesignerElementCollection elements, Model model) { + this.model = model; + this.elements = elements; + } + + @Override + Compartment parseXmlAlias(Node aliasNode) throws InvalidXmlSchemaException { + + String compartmentId = getNodeAttr("compartment", aliasNode); + CellDesignerCompartment compartment = elements.getElementByElementId(compartmentId); + if (compartment == null) { + throw new InvalidXmlSchemaException("Compartment does not exist in a model: " + compartmentId); + } + String aliasId = getNodeAttr("id", aliasNode); + Compartment result = compartment.createModelElement(aliasId); + elements.addElement(compartment, aliasId); + + NodeList nodes = aliasNode.getChildNodes(); + for (int i = 0; i < nodes.getLength(); i++) { + Node node = nodes.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE) { + if (node.getNodeName().equalsIgnoreCase("celldesigner:class")) { + String type = getNodeValue(node); + if (type.equalsIgnoreCase("SQUARE")) { + result = new SquareCompartment(result); + } else if (type.equalsIgnoreCase("SQUARE_CLOSEUP_NORTH")) { + result = new BottomSquareCompartment(result, model); + } else if (type.equalsIgnoreCase("SQUARE_CLOSEUP_SOUTH")) { + result = new TopSquareCompartment(result, model); + } else if (type.equalsIgnoreCase("SQUARE_CLOSEUP_WEST")) { + result = new RightSquareCompartment(result, model); + } else if (type.equalsIgnoreCase("SQUARE_CLOSEUP_EAST")) { + result = new LeftSquareCompartment(result, model); + } else if (type.equalsIgnoreCase("OVAL")) { + result = new OvalCompartment(result); + } else { + throw new InvalidXmlSchemaException("Unknown compartment type: " + type); + } + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:bounds")) { + result.setX(getNodeAttr("x", node)); + result.setY(getNodeAttr("y", node)); + result.setWidth(getNodeAttr("w", node)); + result.setHeight(getNodeAttr("h", node)); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:doubleLine")) { + result.setLineThickness(getNodeAttr("thickness", node)); + result.setLineOuterWidth(getNodeAttr("outerWidth", node)); + result.setLineInnerWidth(getNodeAttr("innerWidth", node)); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:paint")) { + result.setColor(getCommonParser().getColor(node)); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:info")) { + // not handled + continue; + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:point")) { + if (result instanceof BottomSquareCompartment) { + result.setY(getNodeAttr("y", node)); + } else if (result instanceof LeftSquareCompartment) { + result.setX(getNodeAttr("x", node)); + } else if (result instanceof RightSquareCompartment) { + result.setX(getNodeAttr("x", node)); + result.setWidth(result.getWidth() - result.getX()); + } else if (result instanceof TopSquareCompartment) { + result.setY(getNodeAttr("y", node)); + } else { + throw new InvalidXmlSchemaException( + "Don't know what to do with celldesigner:point for class: " + result.getClass()); + } + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:namePoint")) { + result.setNamePoint(getCommonParser().getPosition(node)); + } else { + throw new InvalidXmlSchemaException( + "Unknown element of celldesigner:compartmentAlias: " + node.getNodeName()); + } + } + } + return result; + } + + @Override + public String toXml(Compartment compartment) { + StringBuilder sb = new StringBuilder(""); + + sb.append("<celldesigner:compartmentAlias "); + sb.append("id=\"" + compartment.getElementId() + "\" "); + sb.append("compartment=\"" + elements.getElementId(compartment) + "\">\n"); + + boolean bounds = true; + + if (compartment.getClass().getName().equals(SquareCompartment.class.getName())) { + sb.append("<celldesigner:class>SQUARE</celldesigner:class>\n"); + } else if (compartment.getClass().getName().equals(OvalCompartment.class.getName())) { + sb.append("<celldesigner:class>OVAL</celldesigner:class>\n"); + } else if (compartment.getClass().getName().equals(BottomSquareCompartment.class.getName())) { + sb.append("<celldesigner:class>SQUARE_CLOSEUP_NORTH</celldesigner:class>\n"); + bounds = false; + sb.append("<celldesigner:point x=\"10\" y=\"" + compartment.getY() + "\"/>"); + } else if (compartment.getClass().getName().equals(TopSquareCompartment.class.getName())) { + sb.append("<celldesigner:class>SQUARE_CLOSEUP_SOUTH</celldesigner:class>\n"); + bounds = false; + sb.append("<celldesigner:point x=\"10\" y=\"" + compartment.getY() + "\"/>"); + } else if (compartment.getClass().getName().equals(LeftSquareCompartment.class.getName())) { + sb.append("<celldesigner:class>SQUARE_CLOSEUP_EAST</celldesigner:class>\n"); + bounds = false; + sb.append("<celldesigner:point x=\"" + compartment.getWidth() + "\" y=\"10\"/>"); + } else if (compartment.getClass().getName().equals(RightSquareCompartment.class.getName())) { + sb.append("<celldesigner:class>SQUARE_CLOSEUP_WEST</celldesigner:class>\n"); + bounds = false; + sb.append("<celldesigner:point x=\"" + compartment.getX() + "\" y=\"10\"/>"); + } else { + throw new NotImplementedException("Unknown compartment class: " + compartment.getClass()); + } + if (bounds) { + sb.append("<celldesigner:bounds "); + sb.append("x=\"" + compartment.getX() + "\" "); + sb.append("y=\"" + compartment.getY() + "\" "); + sb.append("w=\"" + compartment.getWidth() + "\" "); + sb.append("h=\"" + compartment.getHeight() + "\"/>\n"); + } + + sb.append("<celldesigner:namePoint "); + sb.append("x=\"" + compartment.getNamePoint().getX() + "\" "); + sb.append("y=\"" + compartment.getNamePoint().getY() + "\"/>\n"); + + sb.append("<celldesigner:doubleLine "); + sb.append("thickness=\"" + compartment.getThickness() + "\" "); + sb.append("outerWidth=\"" + compartment.getOuterWidth() + "\" "); + sb.append("innerWidth=\"" + compartment.getInnerWidth() + "\"/>\n"); + + sb.append("<celldesigner:paint "); + sb.append("color=\"" + colorToString(compartment.getColor()) + "\" scheme=\"Color\"/>\n"); + + sb.append("</celldesigner:compartmentAlias>\n"); + + return sb.toString(); + } } 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 e3b9b91842..3e3b7bc662 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 @@ -88,6 +88,7 @@ public class ComplexAliasXmlParser extends AbstractAliasXmlParser<Complex> { throw new InvalidXmlSchemaException("No species with id=\"" + speciesId + "\" for complex alias \"" + aliasId + "\""); } Complex result = species.createModelElement(aliasId); + elements.addElement(species, aliasId); String state = "usual"; NodeList nodes = aliasNode.getChildNodes(); 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 b936673c9f..c92137511e 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 @@ -26,223 +26,227 @@ import lcsb.mapviewer.model.map.species.Species; * @see Complex */ public class SpeciesAliasXmlParser extends AbstractAliasXmlParser<Species> { - /** - * Default class logger. - */ - private Logger logger = Logger.getLogger(SpeciesAliasXmlParser.class.getName()); - - /** - * Collection of {@link CellDesignerElement cell designer elements} parsed - * from xml. - */ - private CellDesignerElementCollection elements; - - /** - * Model for which we parse elements. - */ - private Model model; - - /** - * Default constructor with model object for which we parse data. - * - * @param model - * model for which we parse elements - * @param elements - * collection of {@link CellDesignerElement cell designer elements} - * parsed from xml - */ - public SpeciesAliasXmlParser(CellDesignerElementCollection elements, Model model) { - this.elements = elements; - this.model = model; - } - - @Override - Species parseXmlAlias(Node aliasNode) throws InvalidXmlSchemaException { - - String speciesId = getNodeAttr("species", aliasNode); - String aliasId = getNodeAttr("id", aliasNode); - CellDesignerSpecies<?> species = elements.getElementByElementId(speciesId); - if (species == null) { - throw new InvalidXmlSchemaException("Unknown species for alias (speciesId: " + speciesId + ")"); - } - if (species instanceof CellDesignerComplexSpecies) { - logger.warn("[" + speciesId + "," + aliasId + "]\tSpecies is defined as a complex, but alias is not a complex. Changing alias to complex."); - } - - Species result = species.createModelElement(aliasId); - - String state = "usual"; - NodeList nodes = aliasNode.getChildNodes(); - View usualView = null; - View briefView = null; - for (int x = 0; x < nodes.getLength(); x++) { - Node node = nodes.item(x); - if (node.getNodeType() == Node.ELEMENT_NODE) { - if (node.getNodeName().equalsIgnoreCase("celldesigner:activity")) { - result.setActivity(getNodeValue(node).equalsIgnoreCase("active")); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:bounds")) { - result.setX(getNodeAttr("X", node)); - result.setY(getNodeAttr("Y", node)); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:font")) { - result.setFontSize(getNodeAttr("size", node)); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:view")) { - state = getNodeAttr("state", node); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:usualView")) { - usualView = getCommonParser().getView(node); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:briefView")) { - briefView = getCommonParser().getView(node); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:info")) { - processAliasState(node, result); - } else if (node.getNodeName().equalsIgnoreCase("celldesigner:structuralState")) { - // not handled - continue; - } else { - throw new InvalidXmlSchemaException("Unknown element of celldesigner:speciesAlias: " + node.getNodeName()); - } - } - } - - View view = null; - if (state.equalsIgnoreCase("usual")) { - view = usualView; - } else if (state.equalsIgnoreCase("brief")) { - view = briefView; - } - - if (view != null) { - // inner position defines the position in compartment - // result.moveBy(view.innerPosition); - result.setWidth(view.getBoxSize().width); - result.setHeight(view.getBoxSize().height); - result.setLineWidth(view.getSingleLine().getWidth()); - result.setColor(view.getColor()); - } else { - throw new InvalidXmlSchemaException("No view in Alias"); - } - result.setState(state); - String compartmentAliasId = getNodeAttr("compartmentAlias", aliasNode); - if (!compartmentAliasId.isEmpty()) { - Compartment compartment = model.getElementByElementId(compartmentAliasId); - if (compartment == null) { - throw new InvalidXmlSchemaException("CompartmentAlias does not exist: " + compartmentAliasId); - } else { - result.setCompartment(compartment); - compartment.addElement(result); - } - } - String complexAliasId = getNodeAttr("complexSpeciesAlias", aliasNode); - if (!complexAliasId.isEmpty()) { - Complex complex = model.getElementByElementId(complexAliasId); - if (complex == null) { - throw new InvalidXmlSchemaException("ComplexAlias does not exist: " + complexAliasId + ", current: " + result.getElementId()); - } else { - result.setComplex(complex); - complex.addSpecies(result); - } - } - return result; - } - - /** - * Process node with information about alias state and puts data into alias. - * - * @param node - * node where information about alias state is stored - * @param alias - * alias object to be modified if necessary - */ - private void processAliasState(Node node, Species alias) { - String state = getNodeAttr("state", node); - if ("open".equalsIgnoreCase(state)) { - String prefix = getNodeAttr("prefix", node); - String label = getNodeAttr("label", node); - alias.setStatePrefix(prefix); - alias.setStateLabel(label); - } else if ("empty".equalsIgnoreCase(state)) { - return; - } else if (state == null || state.isEmpty()) { - return; - } else { - throw new NotImplementedException("[Alias: " + alias.getElementId() + "] Unkown alias state: " + state); - } - - } - - @Override - public String toXml(Species species) { - Compartment ca = null; - // artifitial compartment aliases should be excluded - if (species.getCompartment() != null && !(species.getCompartment() instanceof PathwayCompartment)) { - ca = (Compartment) species.getCompartment(); - } else if (species.getComplex() == null) { - ModelData model = species.getModelData(); - if (model != null) { - for (Compartment cAlias : model.getModel().getCompartments()) { - if (!(cAlias instanceof PathwayCompartment) && cAlias.cross(species)) { - if (ca == null) { - ca = cAlias; - } else if (ca.getSize() > cAlias.getSize()) { - ca = cAlias; - } - } - } - } - } - - Complex complex = species.getComplex(); - - String compartmentAliasId = null; - if (ca != null) { - compartmentAliasId = ca.getElementId(); - } - StringBuilder sb = new StringBuilder(""); - sb.append("<celldesigner:speciesAlias "); - sb.append("id=\"" + species.getElementId() + "\" "); - sb.append("species=\"" + elements.getElementId(species) + "\" "); - if (compartmentAliasId != null) { - sb.append("compartmentAlias=\"" + compartmentAliasId + "\" "); - } - - if (complex != null) { - sb.append("complexSpeciesAlias=\"" + complex.getElementId() + "\" "); - } - sb.append(">\n"); - - if (species.getActivity() != null) { - if (species.getActivity()) { - sb.append("<celldesigner:activity>active</celldesigner:activity>\n"); - } else { - sb.append("<celldesigner:activity>inactive</celldesigner:activity>\n"); - } - } - - sb.append("<celldesigner:bounds "); - sb.append("x=\"" + species.getX() + "\" "); - sb.append("y=\"" + species.getY() + "\" "); - sb.append("w=\"" + species.getWidth() + "\" "); - sb.append("h=\"" + species.getHeight() + "\" "); - sb.append("/>\n"); - - sb.append("<celldesigner:font size=\"" + species.getFontSize() + "\"/>\n"); - - // TODO to be improved - sb.append("<celldesigner:view state=\"usual\"/>\n"); - sb.append("<celldesigner:usualView>"); - sb.append("<celldesigner:innerPosition x=\"" + species.getX() + "\" y=\"" + species.getY() + "\"/>"); - sb.append("<celldesigner:boxSize width=\"" + species.getWidth() + "\" height=\"" + species.getHeight() + "\"/>"); - sb.append("<celldesigner:singleLine width=\"" + species.getLineWidth() + "\"/>"); - sb.append("<celldesigner:paint color=\"" + colorToString(species.getColor()) + "\" scheme=\"Color\"/>"); - sb.append("</celldesigner:usualView>\n"); - sb.append("<celldesigner:briefView>"); - sb.append("<celldesigner:innerPosition x=\"" + species.getX() + "\" y=\"" + species.getY() + "\"/>"); - sb.append("<celldesigner:boxSize width=\"" + species.getWidth() + "\" height=\"" + species.getHeight() + "\"/>"); - sb.append("<celldesigner:singleLine width=\"" + species.getLineWidth() + "\"/>"); - sb.append("<celldesigner:paint color=\"" + colorToString(species.getColor()) + "\" scheme=\"Color\"/>"); - sb.append("</celldesigner:briefView>\n"); - if (species.getStateLabel() != null || species.getStatePrefix() != null) { - sb.append("<celldesigner:info state=\"open\" prefix=\"" + species.getStatePrefix() + "\" label=\"" + species.getStateLabel() + "\"/>\n"); - } - sb.append("</celldesigner:speciesAlias>\n"); - return sb.toString(); - } + /** + * Default class logger. + */ + private Logger logger = Logger.getLogger(SpeciesAliasXmlParser.class.getName()); + + /** + * Collection of {@link CellDesignerElement cell designer elements} parsed from + * xml. + */ + private CellDesignerElementCollection elements; + + /** + * Model for which we parse elements. + */ + private Model model; + + /** + * Default constructor with model object for which we parse data. + * + * @param model + * model for which we parse elements + * @param elements + * collection of {@link CellDesignerElement cell designer elements} + * parsed from xml + */ + public SpeciesAliasXmlParser(CellDesignerElementCollection elements, Model model) { + this.elements = elements; + this.model = model; + } + + @Override + Species parseXmlAlias(Node aliasNode) throws InvalidXmlSchemaException { + + String speciesId = getNodeAttr("species", aliasNode); + String aliasId = getNodeAttr("id", aliasNode); + CellDesignerSpecies<?> species = elements.getElementByElementId(speciesId); + if (species == null) { + throw new InvalidXmlSchemaException("Unknown species for alias (speciesId: " + speciesId + ")"); + } + if (species instanceof CellDesignerComplexSpecies) { + logger.warn("[" + speciesId + "," + aliasId + + "]\tSpecies is defined as a complex, but alias is not a complex. Changing alias to complex."); + } + + elements.addElement(species, aliasId); + Species result = species.createModelElement(aliasId); + + String state = "usual"; + NodeList nodes = aliasNode.getChildNodes(); + View usualView = null; + View briefView = null; + for (int x = 0; x < nodes.getLength(); x++) { + Node node = nodes.item(x); + if (node.getNodeType() == Node.ELEMENT_NODE) { + if (node.getNodeName().equalsIgnoreCase("celldesigner:activity")) { + result.setActivity(getNodeValue(node).equalsIgnoreCase("active")); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:bounds")) { + result.setX(getNodeAttr("X", node)); + result.setY(getNodeAttr("Y", node)); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:font")) { + result.setFontSize(getNodeAttr("size", node)); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:view")) { + state = getNodeAttr("state", node); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:usualView")) { + usualView = getCommonParser().getView(node); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:briefView")) { + briefView = getCommonParser().getView(node); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:info")) { + processAliasState(node, result); + } else if (node.getNodeName().equalsIgnoreCase("celldesigner:structuralState")) { + // not handled + continue; + } else { + throw new InvalidXmlSchemaException("Unknown element of celldesigner:speciesAlias: " + node.getNodeName()); + } + } + } + + View view = null; + if (state.equalsIgnoreCase("usual")) { + view = usualView; + } else if (state.equalsIgnoreCase("brief")) { + view = briefView; + } + + if (view != null) { + // inner position defines the position in compartment + // result.moveBy(view.innerPosition); + result.setWidth(view.getBoxSize().width); + result.setHeight(view.getBoxSize().height); + result.setLineWidth(view.getSingleLine().getWidth()); + result.setColor(view.getColor()); + } else { + throw new InvalidXmlSchemaException("No view in Alias"); + } + result.setState(state); + String compartmentAliasId = getNodeAttr("compartmentAlias", aliasNode); + if (!compartmentAliasId.isEmpty()) { + Compartment compartment = model.getElementByElementId(compartmentAliasId); + if (compartment == null) { + throw new InvalidXmlSchemaException("CompartmentAlias does not exist: " + compartmentAliasId); + } else { + result.setCompartment(compartment); + compartment.addElement(result); + } + } + String complexAliasId = getNodeAttr("complexSpeciesAlias", aliasNode); + if (!complexAliasId.isEmpty()) { + Complex complex = model.getElementByElementId(complexAliasId); + if (complex == null) { + throw new InvalidXmlSchemaException( + "ComplexAlias does not exist: " + complexAliasId + ", current: " + result.getElementId()); + } else { + result.setComplex(complex); + complex.addSpecies(result); + } + } + return result; + } + + /** + * Process node with information about alias state and puts data into alias. + * + * @param node + * node where information about alias state is stored + * @param alias + * alias object to be modified if necessary + */ + private void processAliasState(Node node, Species alias) { + String state = getNodeAttr("state", node); + if ("open".equalsIgnoreCase(state)) { + String prefix = getNodeAttr("prefix", node); + String label = getNodeAttr("label", node); + alias.setStatePrefix(prefix); + alias.setStateLabel(label); + } else if ("empty".equalsIgnoreCase(state)) { + return; + } else if (state == null || state.isEmpty()) { + return; + } else { + throw new NotImplementedException("[Alias: " + alias.getElementId() + "] Unkown alias state: " + state); + } + + } + + @Override + public String toXml(Species species) { + Compartment ca = null; + // artificial compartment aliases should be excluded + if (species.getCompartment() != null && !(species.getCompartment() instanceof PathwayCompartment)) { + ca = (Compartment) species.getCompartment(); + } else if (species.getComplex() == null) { + ModelData model = species.getModelData(); + if (model != null) { + for (Compartment cAlias : model.getModel().getCompartments()) { + if (!(cAlias instanceof PathwayCompartment) && cAlias.cross(species)) { + if (ca == null) { + ca = cAlias; + } else if (ca.getSize() > cAlias.getSize()) { + ca = cAlias; + } + } + } + } + } + + Complex complex = species.getComplex(); + + String compartmentAliasId = null; + if (ca != null) { + compartmentAliasId = ca.getElementId(); + } + StringBuilder sb = new StringBuilder(""); + sb.append("<celldesigner:speciesAlias "); + sb.append("id=\"" + species.getElementId() + "\" "); + sb.append("species=\"" + elements.getElementId(species) + "\" "); + if (compartmentAliasId != null) { + sb.append("compartmentAlias=\"" + compartmentAliasId + "\" "); + } + + if (complex != null) { + sb.append("complexSpeciesAlias=\"" + complex.getElementId() + "\" "); + } + sb.append(">\n"); + + if (species.getActivity() != null) { + if (species.getActivity()) { + sb.append("<celldesigner:activity>active</celldesigner:activity>\n"); + } else { + sb.append("<celldesigner:activity>inactive</celldesigner:activity>\n"); + } + } + + sb.append("<celldesigner:bounds "); + sb.append("x=\"" + species.getX() + "\" "); + sb.append("y=\"" + species.getY() + "\" "); + sb.append("w=\"" + species.getWidth() + "\" "); + sb.append("h=\"" + species.getHeight() + "\" "); + sb.append("/>\n"); + + sb.append("<celldesigner:font size=\"" + species.getFontSize() + "\"/>\n"); + + // TODO to be improved + sb.append("<celldesigner:view state=\"usual\"/>\n"); + sb.append("<celldesigner:usualView>"); + sb.append("<celldesigner:innerPosition x=\"" + species.getX() + "\" y=\"" + species.getY() + "\"/>"); + sb.append("<celldesigner:boxSize width=\"" + species.getWidth() + "\" height=\"" + species.getHeight() + "\"/>"); + sb.append("<celldesigner:singleLine width=\"" + species.getLineWidth() + "\"/>"); + sb.append("<celldesigner:paint color=\"" + colorToString(species.getColor()) + "\" scheme=\"Color\"/>"); + sb.append("</celldesigner:usualView>\n"); + sb.append("<celldesigner:briefView>"); + sb.append("<celldesigner:innerPosition x=\"" + species.getX() + "\" y=\"" + species.getY() + "\"/>"); + sb.append("<celldesigner:boxSize width=\"" + species.getWidth() + "\" height=\"" + species.getHeight() + "\"/>"); + sb.append("<celldesigner:singleLine width=\"" + species.getLineWidth() + "\"/>"); + sb.append("<celldesigner:paint color=\"" + colorToString(species.getColor()) + "\" scheme=\"Color\"/>"); + sb.append("</celldesigner:briefView>\n"); + if (species.getStateLabel() != null || species.getStatePrefix() != null) { + sb.append("<celldesigner:info state=\"open\" prefix=\"" + species.getStatePrefix() + "\" label=\"" + + species.getStateLabel() + "\"/>\n"); + } + sb.append("</celldesigner:speciesAlias>\n"); + return sb.toString(); + } } diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionFromXml.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionFromXml.java index 735682c067..c0a3ef113e 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionFromXml.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionFromXml.java @@ -17,6 +17,7 @@ import org.w3c.dom.NodeList; import lcsb.mapviewer.common.XmlParser; import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; +import lcsb.mapviewer.converter.model.celldesigner.CellDesignerElementCollection; import lcsb.mapviewer.converter.model.celldesigner.annotation.RestAnnotationParser; import lcsb.mapviewer.converter.model.celldesigner.annotation.XmlAnnotationParser; import lcsb.mapviewer.converter.model.celldesigner.geometry.CellDesignerAliasConverter; @@ -35,6 +36,7 @@ import lcsb.mapviewer.model.graphics.ArrowType; import lcsb.mapviewer.model.graphics.ArrowTypeData; import lcsb.mapviewer.model.graphics.LineType; import lcsb.mapviewer.model.graphics.PolylineData; +import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.reaction.AbstractNode; import lcsb.mapviewer.model.map.reaction.AndOperator; @@ -136,13 +138,16 @@ public class ReactionFromXml extends XmlParser { */ private boolean sbgn; + CellDesignerElementCollection elements; + /** * Default constructor. * * @param sbgn * Should the converter use SBGN standard */ - public ReactionFromXml(boolean sbgn) { + public ReactionFromXml(CellDesignerElementCollection elements, boolean sbgn) { + this.elements = elements; this.sbgn = sbgn; } @@ -153,7 +158,7 @@ public class ReactionFromXml extends XmlParser { * xml node * @param model * model where the reaction is placed - * @return reactin from xml node + * @return reaction from xml node * @throws ReactionParserException * thrown when the xml is invalid * @throws InvalidXmlSchemaException @@ -211,16 +216,25 @@ public class ReactionFromXml extends XmlParser { private Map<String, Element> getSpeciesIdToElementMappingFromAnnotationNode(Node annotationNode, Model model) { Map<String, Element> result = new HashMap<>(); - + List<Node> elementNodes = new ArrayList<>(); elementNodes.addAll(super.getAllNotNecessirellyDirectChild("celldesigner:baseReactant", annotationNode)); elementNodes.addAll(super.getAllNotNecessirellyDirectChild("celldesigner:baseProduct", annotationNode)); elementNodes.addAll(super.getAllNotNecessirellyDirectChild("celldesigner:linkTarget", annotationNode)); - - for (Node node: elementNodes) { + + for (Node node : elementNodes) { String speciesId = super.getNodeAttr("species", node); String aliasId = super.getNodeAttr("alias", node); - result.put(speciesId, model.getElementByElementId(aliasId)); + Element element = model.getElementByElementId(aliasId); + result.put(speciesId, element); + + Compartment compartment = element.getCompartment(); + if (compartment != null) { + // in kinetics we can have reference to compartment (so we need to find SBML + // compartment id) + String compartmentId = elements.getElementByElementId(compartment.getElementId()).getElementId(); + result.put(compartmentId, compartment); + } } return result; } diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionXmlParser.java index 1bdd6a7a7a..96d37edc31 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionXmlParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionXmlParser.java @@ -35,14 +35,14 @@ public class ReactionXmlParser extends XmlParser { * other parts of the model. * * @param sbgn - * Should sbgn standard be used + * Should SBGN standard be used * @param elements * collection of {@link CellDesignerElement cell designer elements} * parsed from xml */ public ReactionXmlParser(CellDesignerElementCollection elements, boolean sbgn) { reactionToXml = new ReactionToXml(elements, sbgn); - reactionFromXml = new ReactionFromXml(sbgn); + reactionFromXml = new ReactionFromXml(elements, sbgn); } /** @@ -52,7 +52,7 @@ public class ReactionXmlParser extends XmlParser { * xml node * @param model * model where the reaction is placed - * @return reactin from xml node + * @return reaction from xml node * @throws ReactionParserException * thrown when the xml is invalid * @throws InvalidXmlSchemaException diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/structure/CellDesignerElement.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/structure/CellDesignerElement.java index c686ccb3cf..577844e965 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/structure/CellDesignerElement.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/structure/CellDesignerElement.java @@ -14,13 +14,13 @@ import lcsb.mapviewer.model.map.MiriamData; import lcsb.mapviewer.model.map.species.Element; /** - * Generic CellDesigner elementmap. It is a root object in inheritence three for + * Generic CellDesigner element map. It is a root object in inheritance three for * every element ({@link CellDesignerSpecies} or {@link CellDesignerCompartment} * ). * * @param <T> - * type of the {@link Element} in the model that is desrbide byy this - * celldesigner class + * type of the {@link Element} in the model that is describe by this + * CellDesigner class * @author Piotr Gawron * */ 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 bb1aa8ad25..e5b4e0509e 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 @@ -5,6 +5,8 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.awt.geom.Point2D; +import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; @@ -20,320 +22,343 @@ import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerCompart import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerComplexSpecies; import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerGenericProtein; import lcsb.mapviewer.model.map.compartment.Compartment; +import lcsb.mapviewer.model.map.compartment.SquareCompartment; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelFullIndexed; import lcsb.mapviewer.model.map.species.Complex; +import lcsb.mapviewer.model.map.species.GenericProtein; import lcsb.mapviewer.model.map.species.Species; public class AliasCollectionXmlParserTest extends CellDesignerTestFunctions { - AliasCollectionXmlParser parser; - Model model; - CellDesignerElementCollection elements; - Logger logger = Logger.getLogger(AliasCollectionXmlParserTest.class.getName()); - - @Before - public void setUp() throws Exception { - model = new ModelFullIndexed(null); - - elements = new CellDesignerElementCollection(); - - parser = new AliasCollectionXmlParser(elements, model); - - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void testParseXmlSpeciesAliasCollection() throws Exception { - try { - elements.addElement(new CellDesignerGenericProtein("s2594")); - elements.addElement(new CellDesignerGenericProtein("s2595")); - elements.addElement(new CellDesignerGenericProtein("s2596")); - elements.addElement(new CellDesignerGenericProtein("s2506")); - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_species_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - List<Species> list = parser.parseXmlSpeciesAliasCollection(node); - assertEquals(0, getWarnings().size()); - assertNotNull(list); - assertEquals(4, list.size()); - Species aliasSa8 = null; - Species aliasSa9 = null; - Species aliasSa10 = null; - Species aliasSa11 = null; - for (Species alias : list) { - if (alias.getElementId().equals("sa8")) - aliasSa8 = alias; - if (alias.getElementId().equals("sa9")) - aliasSa9 = alias; - if (alias.getElementId().equals("sa10")) - aliasSa10 = alias; - if (alias.getElementId().equals("sa11")) - aliasSa11 = alias; - } - assertNotNull(aliasSa8); - assertNotNull(aliasSa9); - assertNotNull(aliasSa10); - assertNotNull(aliasSa11); - - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlSpeciesAliasCollection() throws Exception { - try { - String xmlString = readFile("testFiles/invalid/species_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - parser.parseXmlSpeciesAliasCollection(node); - fail("Exception expected"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("Unknown element of celldesigner:listOfSpeciesAliases")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlComplexAliasCollection() throws Exception { - try { - String xmlString = readFile("testFiles/invalid/complex_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - parser.parseXmlComplexAliasCollection(node); - fail("Exception expected"); - } catch (InvalidXmlSchemaException e) { - assertTrue("Invalid message: " + e.getMessage(), e.getMessage().contains("Unknown element of celldesigner:listOfComplexSpeciesAliases")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlCompartmentAliasCollection() throws Exception { - try { - String xmlString = readFile("testFiles/invalid/compartment_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - parser.parseXmlCompartmentAliasCollection(node); - fail("Exception expected"); - } catch (InvalidXmlSchemaException e) { - assertTrue("Invalid message: " + e.getMessage(), e.getMessage().contains("Unknown element of celldesigner:listOfCompartmentAliases")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testSpeciesAliasCollectionToXmlString() throws Exception { - try { - elements.addElement(new CellDesignerGenericProtein("s2594")); - elements.addElement(new CellDesignerGenericProtein("s2506")); - elements.addElement(new CellDesignerGenericProtein("s2595")); - elements.addElement(new CellDesignerGenericProtein("s2596")); - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_species_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - List<Species> list = parser.parseXmlSpeciesAliasCollection(node); - assertEquals(0, getWarnings().size()); - String xmlString2 = parser.speciesAliasCollectionToXmlString(list); - assertNotNull(xmlString2); - - // add position to elements list, because parser forgot CD ids and created - // new for them - for (Species alias : list) { - elements.addElement(new CellDesignerGenericProtein(elements.getElementId(alias))); - } - - node = getNodeFromXmlString(xmlString2); - list = parser.parseXmlSpeciesAliasCollection(node); - assertEquals(0, getWarnings().size()); - assertNotNull(list); - assertEquals(4, list.size()); - Species aliasSa8 = null; - Species aliasSa9 = null; - Species aliasSa10 = null; - Species aliasSa11 = null; - for (Species alias : list) { - if (alias.getElementId().equals("sa8")) - aliasSa8 = alias; - if (alias.getElementId().equals("sa9")) - aliasSa9 = alias; - if (alias.getElementId().equals("sa10")) - aliasSa10 = alias; - if (alias.getElementId().equals("sa11")) - aliasSa11 = alias; - } - assertNotNull(aliasSa8); - assertNotNull(aliasSa9); - assertNotNull(aliasSa10); - assertNotNull(aliasSa11); - - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseXmlComplexAliasCollection() throws Exception { - try { - elements.addElement(new CellDesignerComplexSpecies("s2597")); - elements.addElement(new CellDesignerComplexSpecies("s2598")); - elements.addElement(new CellDesignerComplexSpecies("s2599")); - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_complex_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - List<Complex> list = parser.parseXmlComplexAliasCollection(node); - assertEquals(0, getWarnings().size()); - assertNotNull(list); - assertEquals(3, list.size()); - Complex aliasSa1 = null; - Complex aliasSa2 = null; - Complex aliasSa3 = null; - for (Complex alias : list) { - if (alias.getElementId().equals("csa1")) - aliasSa1 = alias; - if (alias.getElementId().equals("csa2")) - aliasSa2 = alias; - if (alias.getElementId().equals("csa3")) - aliasSa3 = alias; - } - assertNotNull(aliasSa1); - assertNotNull(aliasSa2); - assertNotNull(aliasSa3); - - } catch (Exception e) { - throw e; - } - } - - @Test - public void testComplexAliasCollectionToXmlString() throws Exception { - try { - elements.addElement(new CellDesignerComplexSpecies("s2597")); - elements.addElement(new CellDesignerComplexSpecies("s2598")); - elements.addElement(new CellDesignerComplexSpecies("s2599")); - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_complex_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - List<Complex> list = parser.parseXmlComplexAliasCollection(node); - assertEquals(0, getWarnings().size()); - String xmlString2 = parser.complexAliasCollectionToXmlString(list); - assertNotNull(xmlString2); - - // add position to elements list, because parser forgot CD ids and created - // new for them - for (Complex complexAlias : list) { - elements.addElement(new CellDesignerComplexSpecies(elements.getElementId(complexAlias))); - } - - node = getNodeFromXmlString(xmlString2); - list = parser.parseXmlComplexAliasCollection(node); - assertEquals(0, getWarnings().size()); - assertNotNull(list); - assertEquals(3, list.size()); - Complex aliasSa1 = null; - Complex aliasSa2 = null; - Complex aliasSa3 = null; - for (Complex alias : list) { - if (alias.getElementId().equals("csa1")) - aliasSa1 = alias; - if (alias.getElementId().equals("csa2")) - aliasSa2 = alias; - if (alias.getElementId().equals("csa3")) - aliasSa3 = alias; - } - assertNotNull(aliasSa1); - assertNotNull(aliasSa2); - assertNotNull(aliasSa3); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseXmlCompartmentAliasCollection() throws Exception { - try { - elements.addElement(new CellDesignerCompartment("c1")); - elements.addElement(new CellDesignerCompartment("c2")); - elements.addElement(new CellDesignerCompartment("c3")); - - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_compartment_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - List<Compartment> list = parser.parseXmlCompartmentAliasCollection(node); - assertEquals(0, getWarnings().size()); - assertNotNull(list); - assertEquals(3, list.size()); - Compartment aliasCa1 = null; - Compartment aliasCa2 = null; - Compartment aliasCa3 = null; - for (Compartment alias : list) { - if (alias.getElementId().equals("ca1")) - aliasCa1 = alias; - if (alias.getElementId().equals("ca2")) - aliasCa2 = alias; - if (alias.getElementId().equals("ca3")) - aliasCa3 = alias; - } - assertNotNull(aliasCa1); - assertNotNull(aliasCa2); - assertNotNull(aliasCa3); - - } catch (Exception e) { - throw e; - } - } - - @Test - public void testCompartmentAliasCollectionToXmlString() throws Exception { - try { - elements.addElement(new CellDesignerCompartment("c1")); - elements.addElement(new CellDesignerCompartment("c2")); - elements.addElement(new CellDesignerCompartment("c3")); - - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_compartment_alias_collection.xml"); - Node node = getNodeFromXmlString(xmlString); - List<Compartment> list = parser.parseXmlCompartmentAliasCollection(node); - assertEquals(0, getWarnings().size()); - - String xmlString2 = parser.compartmentAliasCollectionToXmlString(list); - assertNotNull(xmlString2); - - // add position to elements list, because parser forgot CD ids and created - // new for them - for (Compartment alias : list) { - elements.addElement(new CellDesignerCompartment(elements.getElementId(alias))); - } - - node = getNodeFromXmlString(xmlString2); - list = parser.parseXmlCompartmentAliasCollection(node); - assertEquals(0, getWarnings().size()); - - assertNotNull(list); - assertEquals(3, list.size()); - Compartment aliasSa1 = null; - Compartment aliasSa2 = null; - Compartment aliasSa3 = null; - for (Compartment alias : list) { - if (alias.getElementId().equals("ca1")) - aliasSa1 = alias; - if (alias.getElementId().equals("ca2")) - aliasSa2 = alias; - if (alias.getElementId().equals("ca3")) - aliasSa3 = alias; - } - assertNotNull(aliasSa1); - assertNotNull(aliasSa2); - assertNotNull(aliasSa3); - - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } + AliasCollectionXmlParser parser; + Model model; + CellDesignerElementCollection elements; + Logger logger = Logger.getLogger(AliasCollectionXmlParserTest.class.getName()); + + @Before + public void setUp() throws Exception { + model = new ModelFullIndexed(null); + + elements = new CellDesignerElementCollection(); + + parser = new AliasCollectionXmlParser(elements, model); + + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testParseXmlSpeciesAliasCollection() throws Exception { + try { + elements.addElement(new CellDesignerGenericProtein("s2594")); + elements.addElement(new CellDesignerGenericProtein("s2595")); + elements.addElement(new CellDesignerGenericProtein("s2596")); + elements.addElement(new CellDesignerGenericProtein("s2506")); + String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_species_alias_collection.xml"); + Node node = getNodeFromXmlString(xmlString); + List<Species> list = parser.parseXmlSpeciesAliasCollection(node); + assertEquals(0, getWarnings().size()); + assertNotNull(list); + assertEquals(4, list.size()); + Species aliasSa8 = null; + Species aliasSa9 = null; + Species aliasSa10 = null; + Species aliasSa11 = null; + for (Species alias : list) { + if (alias.getElementId().equals("sa8")) + aliasSa8 = alias; + if (alias.getElementId().equals("sa9")) + aliasSa9 = alias; + if (alias.getElementId().equals("sa10")) + aliasSa10 = alias; + if (alias.getElementId().equals("sa11")) + aliasSa11 = alias; + } + assertNotNull(aliasSa8); + assertNotNull(aliasSa9); + assertNotNull(aliasSa10); + assertNotNull(aliasSa11); + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlSpeciesAliasCollection() throws Exception { + try { + String xmlString = readFile("testFiles/invalid/species_alias_collection.xml"); + Node node = getNodeFromXmlString(xmlString); + parser.parseXmlSpeciesAliasCollection(node); + fail("Exception expected"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("Unknown element of celldesigner:listOfSpeciesAliases")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlComplexAliasCollection() throws Exception { + try { + String xmlString = readFile("testFiles/invalid/complex_alias_collection.xml"); + Node node = getNodeFromXmlString(xmlString); + parser.parseXmlComplexAliasCollection(node); + fail("Exception expected"); + } catch (InvalidXmlSchemaException e) { + assertTrue("Invalid message: " + e.getMessage(), + e.getMessage().contains("Unknown element of celldesigner:listOfComplexSpeciesAliases")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlCompartmentAliasCollection() throws Exception { + try { + String xmlString = readFile("testFiles/invalid/compartment_alias_collection.xml"); + Node node = getNodeFromXmlString(xmlString); + parser.parseXmlCompartmentAliasCollection(node); + fail("Exception expected"); + } catch (InvalidXmlSchemaException e) { + assertTrue("Invalid message: " + e.getMessage(), + e.getMessage().contains("Unknown element of celldesigner:listOfCompartmentAliases")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testSpeciesAliasCollectionToXmlString() throws Exception { + try { + List<Species> originalLlist = createSpeciesList(); + String xmlString2 = parser.speciesAliasCollectionToXmlString(originalLlist); + assertNotNull(xmlString2); + + for (Species alias : originalLlist) { + elements.addElement(new CellDesignerGenericProtein(elements.getElementId(alias))); + } + + Node node = getNodeFromXmlString(xmlString2); + List<Species> list = parser.parseXmlSpeciesAliasCollection(node); + assertEquals(0, getWarnings().size()); + assertNotNull(list); + assertEquals(3, list.size()); + for (Species species : originalLlist) { + boolean found = false; + for (Species alias : list) { + if (alias.getElementId().equals(species.getElementId())) { + found = true; + } + } + assertTrue(found); + } + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + private List<Species> createSpeciesList() { + List<Species> result = new ArrayList<>(); + result.add(createProtein("sa1")); + result.add(createProtein("sa2")); + result.add(createProtein("sa3")); + return result; + } + + private Species createProtein(String id) { + GenericProtein protein = new GenericProtein(id); + protein.setActivity(true); + protein.setFontSize(4); + protein.setHeight(10); + protein.setWidth(20); + protein.setX(30); + protein.setY(40); + protein.setName(id + "name"); + protein.setStateLabel("xxx"); + protein.setStatePrefix("yyy"); + return protein; + } + + @Test + public void testParseXmlComplexAliasCollection() throws Exception { + try { + elements.addElement(new CellDesignerComplexSpecies("s2597")); + elements.addElement(new CellDesignerComplexSpecies("s2598")); + elements.addElement(new CellDesignerComplexSpecies("s2599")); + String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_complex_alias_collection.xml"); + Node node = getNodeFromXmlString(xmlString); + List<Complex> list = parser.parseXmlComplexAliasCollection(node); + assertEquals(0, getWarnings().size()); + assertNotNull(list); + assertEquals(3, list.size()); + Complex aliasSa1 = null; + Complex aliasSa2 = null; + Complex aliasSa3 = null; + for (Complex alias : list) { + if (alias.getElementId().equals("csa1")) + aliasSa1 = alias; + if (alias.getElementId().equals("csa2")) + aliasSa2 = alias; + if (alias.getElementId().equals("csa3")) + aliasSa3 = alias; + } + assertNotNull(aliasSa1); + assertNotNull(aliasSa2); + assertNotNull(aliasSa3); + + } catch (Exception e) { + throw e; + } + } + + @Test + public void testComplexAliasCollectionToXmlString() throws Exception { + try { + List<Complex> list = createComplexAliasList(); + String xmlString2 = parser.complexAliasCollectionToXmlString(list); + assertNotNull(xmlString2); + + for (Complex complexAlias : list) { + elements.addElement(new CellDesignerComplexSpecies(elements.getElementId(complexAlias))); + } + + Node node = getNodeFromXmlString(xmlString2); + list = parser.parseXmlComplexAliasCollection(node); + assertEquals(0, getWarnings().size()); + assertNotNull(list); + assertEquals(3, list.size()); + Complex aliasSa1 = null; + Complex aliasSa2 = null; + Complex aliasSa3 = null; + for (Complex alias : list) { + if (alias.getElementId().equals("csa1")) + aliasSa1 = alias; + if (alias.getElementId().equals("csa2")) + aliasSa2 = alias; + if (alias.getElementId().equals("csa3")) + aliasSa3 = alias; + } + assertNotNull(aliasSa1); + assertNotNull(aliasSa2); + assertNotNull(aliasSa3); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + private List<Complex> createComplexAliasList() { + List<Complex> result = new ArrayList<>(); + result.add(createComplex("csa1")); + result.add(createComplex("csa2")); + result.add(createComplex("csa3")); + return result; + } + + private Complex createComplex(String id) { + Complex complex = new Complex(id); + complex.setFontSize(13.5); + complex.setHeight(90); + complex.setWidth(80); + complex.setName("name_112_" + id); + complex.setX(32); + complex.setY(42); + return complex; + } + + @Test + public void testParseXmlCompartmentAliasCollection() throws Exception { + try { + elements.addElement(new CellDesignerCompartment("c1")); + elements.addElement(new CellDesignerCompartment("c2")); + elements.addElement(new CellDesignerCompartment("c3")); + + String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_compartment_alias_collection.xml"); + Node node = getNodeFromXmlString(xmlString); + List<Compartment> list = parser.parseXmlCompartmentAliasCollection(node); + assertEquals(0, getWarnings().size()); + assertNotNull(list); + assertEquals(3, list.size()); + Compartment aliasCa1 = null; + Compartment aliasCa2 = null; + Compartment aliasCa3 = null; + for (Compartment alias : list) { + if (alias.getElementId().equals("ca1")) + aliasCa1 = alias; + if (alias.getElementId().equals("ca2")) + aliasCa2 = alias; + if (alias.getElementId().equals("ca3")) + aliasCa3 = alias; + } + assertNotNull(aliasCa1); + assertNotNull(aliasCa2); + assertNotNull(aliasCa3); + + } catch (Exception e) { + throw e; + } + } + + @Test + public void testCompartmentAliasCollectionToXmlString() throws Exception { + try { + List<Compartment> originalLlist = createCompartmentList(); + for (Compartment alias : originalLlist) { + elements.addElement(new CellDesignerCompartment(elements.getElementId(alias))); + } + + String xmlString2 = parser.compartmentAliasCollectionToXmlString(originalLlist); + + Node node = getNodeFromXmlString(xmlString2); + List<Compartment> list = parser.parseXmlCompartmentAliasCollection(node); + assertEquals(0, getWarnings().size()); + + assertNotNull(list); + assertEquals(originalLlist.size(), list.size()); + for (Compartment species : originalLlist) { + boolean found = false; + for (Compartment alias : list) { + if (alias.getElementId().equals(species.getElementId())) { + found = true; + } + } + assertTrue(found); + } + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + private List<Compartment> createCompartmentList() { + List<Compartment> result = new ArrayList<>(); + result.add(createCompartment("ca1")); + result.add(createCompartment("ca2")); + result.add(createCompartment("ca3")); + return result; + } + + 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)); + + 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 45cfe9ee61..c0b01bb7d8 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 @@ -6,6 +6,8 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.awt.geom.Point2D; + import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before; @@ -27,231 +29,238 @@ import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelFullIndexed; public class CompartmentAliasXmlParserTest extends CellDesignerTestFunctions { - static Logger logger = Logger.getLogger(CompartmentAliasXmlParser.class); - - CompartmentAliasXmlParser parser; - Model model; - CellDesignerElementCollection elements; - - @Before - public void setUp() throws Exception { - model = new ModelFullIndexed(null); - elements = new CellDesignerElementCollection(); - parser = new CompartmentAliasXmlParser(elements, model); - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void testToXml() throws Exception { - try { - elements.addElement(new CellDesignerCompartment("c1")); - - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_compartment_alias.xml"); - Compartment alias = parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - assertEquals(0, getWarnings().size()); - String xmlString2 = parser.toXml(alias); - assertNotNull(xmlString2); - - elements.addElement(new CellDesignerCompartment(elements.getElementId(alias))); - - Compartment alias2 = parser.parseXmlAlias(xmlString2); - assertEquals(0, getWarnings().size()); - - assertEquals(alias.getElementId(), alias2.getElementId()); - assertNotNull(alias.getName()); - assertEquals(alias.getFontSize(), alias2.getFontSize(), 1e-6); - assertEquals(alias.getHeight(), alias2.getHeight(), 1e-6); - assertEquals(alias.getWidth(), alias2.getWidth(), 1e-6); - assertEquals(alias.getX(), alias2.getX(), 1e-6); - assertEquals(alias.getY(), alias2.getY(), 1e-6); - assertEquals(alias.getNamePoint().getX(), alias2.getNamePoint().getX(), 1e-6); - assertEquals(alias.getNamePoint().getY(), alias2.getNamePoint().getY(), 1e-6); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void parseInvalidAlias() throws Exception { - try { - Model model = new ModelFullIndexed(null); - parser = new CompartmentAliasXmlParser(elements, model); - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_compartment_alias.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expceted"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("Compartment does not exist in a model")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void parseInvalidAlias2() throws Exception { - try { - Model model = new ModelFullIndexed(null); - CellDesignerCompartment comp = new CellDesignerCompartment(); - comp.setElementId("c1"); - elements.addElement(comp); - parser = new CompartmentAliasXmlParser(elements, model); - String xmlString = readFile("testFiles/invalid/compartment_alias.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expceted"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("Unknown compartment type")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void parseInvalidAlias3() throws Exception { - try { - Model model = new ModelFullIndexed(null); - CellDesignerCompartment comp = new CellDesignerCompartment(); - comp.setElementId("c1"); - elements.addElement(comp); - parser = new CompartmentAliasXmlParser(elements, model); - String xmlString = readFile("testFiles/invalid/compartment_alias2.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expceted"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("Don't know what to do with celldesigner:point for class")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void parseInvalidAlias4() throws Exception { - try { - Model model = new ModelFullIndexed(null); - CellDesignerCompartment comp = new CellDesignerCompartment(); - comp.setElementId("c1"); - elements.addElement(comp); - parser = new CompartmentAliasXmlParser(elements, model); - String xmlString = readFile("testFiles/invalid/compartment_alias3.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expceted"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("Unknown element of celldesigner:compartmentAlias")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseXmlAliasNode() throws Exception { - try { - elements.addElement(new CellDesignerCompartment("c1")); - - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_compartment_alias.xml"); - Compartment alias = (Compartment) parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - assertNotNull(alias); - assertEquals("ca1", alias.getElementId()); - assertNotNull(alias.getName()); - assertTrue(alias instanceof SquareCompartment); - 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(0xffcccc00, alias.getColor().getRGB()); - - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testGetters() { - try { - parser.setCommonParser(null); - - assertNull(parser.getCommonParser()); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testLeftToXml() throws Exception { - try { - Compartment alias = new LeftSquareCompartment("id"); - String xml = parser.toXml(alias); - assertNotNull(xml); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - - } - - @Test - public void testRightToXml() throws Exception { - try { - Compartment alias = new RightSquareCompartment("id"); - String xml = parser.toXml(alias); - assertNotNull(xml); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - - } - - @Test - public void testTopToXml() throws Exception { - try { - Compartment alias = new TopSquareCompartment("id"); - String xml = parser.toXml(alias); - assertNotNull(xml); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - - } - - @Test - public void testBotttomToXml() throws Exception { - try { - Compartment alias = new BottomSquareCompartment("id"); - String xml = parser.toXml(alias); - assertNotNull(xml); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - - } - - @Test - public void testUnknownToXml() throws Exception { - try { - Compartment alias = Mockito.mock(BottomSquareCompartment.class); - Mockito.when(alias.getElementId()).thenReturn("some id"); - parser.toXml(alias); - fail("Exception expected"); - } catch (NotImplementedException e) { - assertTrue(e.getMessage().contains("Unknown compartment class")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - - } + static Logger logger = Logger.getLogger(CompartmentAliasXmlParser.class); + + CompartmentAliasXmlParser parser; + Model model; + CellDesignerElementCollection elements; + + @Before + public void setUp() throws Exception { + model = new ModelFullIndexed(null); + elements = new CellDesignerElementCollection(); + parser = new CompartmentAliasXmlParser(elements, model); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testToXml() throws Exception { + try { + Compartment compartment = createCompartment(); + String xmlString = parser.toXml(compartment); + assertNotNull(xmlString); + + elements.addElement(new CellDesignerCompartment(elements.getElementId(compartment))); + + Compartment alias2 = parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); + + assertEquals(compartment.getElementId(), alias2.getElementId()); + assertNotNull(compartment.getName()); + assertEquals(compartment.getFontSize(), alias2.getFontSize(), 1e-6); + assertEquals(compartment.getHeight(), alias2.getHeight(), 1e-6); + 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); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + 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)); + + return compartment; + } + + @Test + public void parseInvalidAlias() throws Exception { + try { + Model model = new ModelFullIndexed(null); + parser = new CompartmentAliasXmlParser(elements, model); + String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_compartment_alias.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expceted"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("Compartment does not exist in a model")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void parseInvalidAlias2() throws Exception { + try { + Model model = new ModelFullIndexed(null); + CellDesignerCompartment comp = new CellDesignerCompartment(); + comp.setElementId("c1"); + elements.addElement(comp); + parser = new CompartmentAliasXmlParser(elements, model); + String xmlString = readFile("testFiles/invalid/compartment_alias.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expceted"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("Unknown compartment type")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void parseInvalidAlias3() throws Exception { + try { + Model model = new ModelFullIndexed(null); + CellDesignerCompartment comp = new CellDesignerCompartment(); + comp.setElementId("c1"); + elements.addElement(comp); + parser = new CompartmentAliasXmlParser(elements, model); + String xmlString = readFile("testFiles/invalid/compartment_alias2.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expceted"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("Don't know what to do with celldesigner:point for class")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void parseInvalidAlias4() throws Exception { + try { + Model model = new ModelFullIndexed(null); + CellDesignerCompartment comp = new CellDesignerCompartment(); + comp.setElementId("c1"); + elements.addElement(comp); + parser = new CompartmentAliasXmlParser(elements, model); + String xmlString = readFile("testFiles/invalid/compartment_alias3.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expceted"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("Unknown element of celldesigner:compartmentAlias")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseXmlAliasNode() throws Exception { + try { + elements.addElement(new CellDesignerCompartment("c1")); + + String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_compartment_alias.xml"); + Compartment alias = (Compartment) parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); + assertNotNull(alias); + assertEquals("ca1", alias.getElementId()); + assertNotNull(alias.getName()); + assertTrue(alias instanceof SquareCompartment); + 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(0xffcccc00, alias.getColor().getRGB()); + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testGetters() { + try { + parser.setCommonParser(null); + + assertNull(parser.getCommonParser()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testLeftToXml() throws Exception { + try { + Compartment alias = new LeftSquareCompartment("id"); + String xml = parser.toXml(alias); + assertNotNull(xml); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + + } + + @Test + public void testRightToXml() throws Exception { + try { + Compartment alias = new RightSquareCompartment("id"); + String xml = parser.toXml(alias); + assertNotNull(xml); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + + } + + @Test + public void testTopToXml() throws Exception { + try { + Compartment alias = new TopSquareCompartment("id"); + String xml = parser.toXml(alias); + assertNotNull(xml); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + + } + + @Test + public void testBotttomToXml() throws Exception { + try { + Compartment alias = new BottomSquareCompartment("id"); + String xml = parser.toXml(alias); + assertNotNull(xml); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + + } + + @Test + public void testUnknownToXml() throws Exception { + try { + Compartment alias = Mockito.mock(BottomSquareCompartment.class); + Mockito.when(alias.getElementId()).thenReturn("some id"); + parser.toXml(alias); + fail("Exception expected"); + } catch (NotImplementedException e) { + assertTrue(e.getMessage().contains("Unknown compartment class")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + + } } 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 c129a0ac83..2864a26ee2 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 @@ -7,6 +7,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerElementCollection; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerTestFunctions; import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerComplexSpecies; @@ -15,66 +16,74 @@ import lcsb.mapviewer.model.map.model.ModelFullIndexed; import lcsb.mapviewer.model.map.species.Complex; public class ComplexAliasXmlParserTest extends CellDesignerTestFunctions { - Model model; - private ComplexAliasXmlParser parser; - CellDesignerElementCollection elements; + Model model; + private ComplexAliasXmlParser parser; + CellDesignerElementCollection elements; - @Before - public void setUp() throws Exception { - model = new ModelFullIndexed(null); - elements = new CellDesignerElementCollection(); - parser = new ComplexAliasXmlParser(elements, model); - } + @Before + public void setUp() throws Exception { + model = new ModelFullIndexed(null); + elements = new CellDesignerElementCollection(); + parser = new ComplexAliasXmlParser(elements, model); + } - @After - public void tearDown() throws Exception { - } + @After + public void tearDown() throws Exception { + } - @Test - public void testToXml() throws Exception { - try { - elements.addElement(new CellDesignerComplexSpecies("s2597")); - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_complex_alias.xml"); - Complex alias = (Complex) parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - String xmlString2 = parser.toXml(alias); - assertNotNull(xmlString2); + @Test + public void testToXml() throws Exception { + try { + Complex complex = createComplex(); + String xmlString = parser.toXml(complex); + assertNotNull(xmlString); - elements.addElement(new CellDesignerComplexSpecies(elements.getElementId(alias))); - Complex alias2 = (Complex) parser.parseXmlAlias(xmlString2); - assertEquals(0, getWarnings().size()); + elements.addElement(new CellDesignerComplexSpecies(elements.getElementId(complex))); + Complex complexFromXml = parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); - assertEquals(alias.getElementId(), alias2.getElementId()); - assertNotNull(alias.getName()); - assertEquals(alias.getFontSize(), alias2.getFontSize(), 1e-6); - assertEquals(alias.getHeight(), alias2.getHeight(), 1e-6); - assertEquals(alias.getWidth(), alias2.getWidth(), 1e-6); - assertEquals(alias.getX(), alias2.getX(), 1e-6); - assertEquals(alias.getY(), alias2.getY(), 1e-6); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } + assertEquals(complex.getElementId(), complexFromXml.getElementId()); + assertNotNull(complex.getName()); + assertEquals(complex.getFontSize(), complexFromXml.getFontSize(), Configuration.EPSILON); + assertEquals(complex.getHeight(), complexFromXml.getHeight(), Configuration.EPSILON); + assertEquals(complex.getWidth(), complexFromXml.getWidth(), Configuration.EPSILON); + assertEquals(complex.getX(), complexFromXml.getX(), Configuration.EPSILON); + assertEquals(complex.getY(), complexFromXml.getY(), Configuration.EPSILON); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } - @Test - public void testParseXmlAliasNode() throws Exception { - try { - elements.addElement(new CellDesignerComplexSpecies("s2597")); + private Complex createComplex() { + Complex complex = new Complex("id"); + complex.setFontSize(13.5); + complex.setHeight(90); + complex.setWidth(80); + complex.setName("112"); + complex.setX(32); + complex.setY(42); + return complex; + } - String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_complex_alias.xml"); - Complex alias = (Complex) parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - assertEquals(false, alias.getActivity()); - assertEquals("csa1", alias.getElementId()); - assertEquals(12.0, alias.getFontSize(), 1e-6); - assertEquals(120.0, alias.getHeight(), 1e-6); - assertEquals(100.0, alias.getWidth(), 1e-6); - assertEquals(744.0, alias.getX(), 1e-6); - assertEquals(0.0, alias.getY(), 1e-6); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } + @Test + public void testParseXmlAliasNode() throws Exception { + try { + elements.addElement(new CellDesignerComplexSpecies("s2597")); + + String xmlString = readFile("testFiles/xmlNodeTestExamples/cd_complex_alias.xml"); + Complex alias = (Complex) parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); + assertEquals(false, alias.getActivity()); + assertEquals("csa1", alias.getElementId()); + assertEquals(12.0, alias.getFontSize(), Configuration.EPSILON); + assertEquals(120.0, alias.getHeight(), Configuration.EPSILON); + assertEquals(100.0, alias.getWidth(), Configuration.EPSILON); + assertEquals(744.0, alias.getX(), Configuration.EPSILON); + assertEquals(0.0, alias.getY(), Configuration.EPSILON); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } } 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 eb9952801d..64bacf8376 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 @@ -27,300 +27,310 @@ import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelData; import lcsb.mapviewer.model.map.model.ModelFullIndexed; import lcsb.mapviewer.model.map.species.Complex; +import lcsb.mapviewer.model.map.species.GenericProtein; import lcsb.mapviewer.model.map.species.Species; public class SpeciesAliasXmlParserTest extends CellDesignerTestFunctions { - static Logger logger = Logger.getLogger(SpeciesAliasXmlParser.class); - - Model model; - private SpeciesAliasXmlParser parser; - - private String testCompartmentAliasId2 = "s3"; - private String testCompartmentAliasId = "s4"; - private String testSpeciesId = "s5"; - private String testAliasId = "s6"; - CellDesignerElementCollection elements; - - @Before - public void setUp() throws Exception { - elements = new CellDesignerElementCollection(); - - model = createStubModel(); - - CellDesignerGenericProtein species = new CellDesignerGenericProtein(); - species.setElementId("s78"); - elements.addElement(species); - - parser = new SpeciesAliasXmlParser(elements, model); - } - - private Model createStubModel() { - Model model = new ModelFullIndexed(null); - model.addElement(new Compartment("ca1")); - return model; - } - - @After - public void tearDown() throws Exception { - } - - @Test - public void testParseXmlAliasNode() throws Exception { - try { - String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias.xml"); - Species alias = parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - assertEquals(false, alias.getActivity()); - assertEquals("sa36", alias.getElementId()); - assertEquals(16.0, alias.getFontSize(), 1e-6); - assertEquals(25.0, alias.getHeight(), 1e-6); - assertEquals(80, alias.getWidth(), 1e-6); - assertEquals(11813.0, alias.getX(), 1e-6); - assertEquals(2840.5, alias.getY(), 1e-6); - assertEquals("ca1", alias.getCompartment().getElementId()); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseXmlAliasFont() throws Exception { - try { - String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias_with_font.xml"); - Species alias = parser.parseXmlAlias(xmlString); - assertEquals(30.0, alias.getFontSize(), 1e-6); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testToXml() throws Exception { - try { - String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias.xml"); - Species alias = parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - String xmlString2 = parser.toXml(alias); - assertNotNull(xmlString2); - - elements.addElement(new CellDesignerGenericProtein(elements.getElementId(alias))); - - Model model2 = createStubModel(); - - parser = new SpeciesAliasXmlParser(elements, model2); - Species alias2 = parser.parseXmlAlias(xmlString2); - assertEquals(0, getWarnings().size()); - - assertEquals(alias.getActivity(), alias2.getActivity()); - assertEquals(alias.getElementId(), alias2.getElementId()); - assertEquals(alias.getFontSize(), alias2.getFontSize(), 1e-6); - assertEquals(alias.getHeight(), alias2.getHeight(), 1e-6); - assertEquals(alias.getWidth(), alias2.getWidth(), 1e-6); - assertEquals(alias.getX(), alias2.getX(), 1e-6); - assertEquals(alias.getY(), alias2.getY(), 1e-6); - assertEquals(alias.getCompartment().getElementId(), alias2.getCompartment().getElementId()); - assertEquals("Alias state label different", alias.getStateLabel(), alias2.getStateLabel()); - assertEquals("Alias state prefix different", alias.getStatePrefix(), alias2.getStatePrefix()); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testToXmlAliasWithStateNode() throws Exception { - try { - String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias_with_state.xml"); - Species alias = parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - String xmlString2 = parser.toXml(alias); - assertNotNull(xmlString2); - - elements.addElement(new CellDesignerGenericProtein(elements.getElementId(alias))); - Species alias2 = parser.parseXmlAlias(xmlString2); - assertEquals(0, getWarnings().size()); - - assertEquals("Alias state label different", alias.getStateLabel(), alias2.getStateLabel()); - assertEquals("Alias state prefix different", alias.getStatePrefix(), alias2.getStatePrefix()); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseXmlAliasWithStateNode() throws Exception { - try { - String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias_with_state.xml"); - Species alias = parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - assertNotNull(alias); - assertEquals("test", alias.getStateLabel()); - assertEquals("free input", alias.getStatePrefix()); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseXmlAliasWithoutStateNode() throws Exception { - try { - String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias_without_state.xml"); - Species alias = parser.parseXmlAlias(xmlString); - assertEquals(0, getWarnings().size()); - assertNotNull(alias); - assertNull(alias.getStateLabel()); - assertNull(alias.getStatePrefix()); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlAliasNode() throws Exception { - try { - String xmlString = readFile("testFiles/invalid/species_alias.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expected"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("Unknown species for alias")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlAliasNode2() throws Exception { - try { - String xmlString = readFile("testFiles/invalid/species_alias2.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expected"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("Unknown element of celldesigner:speciesAlias")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlAliasNode3() throws Exception { - try { - String xmlString = readFile("testFiles/invalid/species_alias3.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expected"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("No view in Alias")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlAliasNode4() throws Exception { - try { - parser = new SpeciesAliasXmlParser(elements, model); - - String xmlString = readFile("testFiles/invalid/species_alias4.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expected"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("CompartmentAlias does not exist")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlAliasNode5() throws Exception { - try { - parser = new SpeciesAliasXmlParser(elements, model); - - String xmlString = readFile("testFiles/invalid/species_alias5.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expected"); - } catch (InvalidXmlSchemaException e) { - assertTrue(e.getMessage().contains("ComplexAlias does not exist")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testParseInvalidXmlAliasNode6() throws Exception { - try { - parser = new SpeciesAliasXmlParser(elements, model); - - String xmlString = readFile("testFiles/invalid/species_alias6.xml"); - parser.parseXmlAlias(xmlString); - fail("Exception expected"); - } catch (NotImplementedException e) { - assertTrue(e.getMessage().contains("Unkown alias state")); - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } - - @Test - public void testToXmlWithUnknownCompartment() throws Exception { - try { - Model model = Mockito.mock(ModelFullIndexed.class); - ModelData md = new ModelData(); - md.setModel(model); - - Compartment ca2 = new Compartment(testCompartmentAliasId2); - ca2.setElementId(testCompartmentAliasId2); - ca2.setX(6); - ca2.setY(6); - ca2.setWidth(190); - ca2.setHeight(190); - - Compartment ca = new Compartment(testCompartmentAliasId); - ca.setElementId(testCompartmentAliasId); - ca.setX(5); - ca.setY(5); - ca.setWidth(200); - ca.setHeight(200); - - List<Compartment> list = new ArrayList<>(); - list.add(ca); - list.add(ca2); - - // ensure that we return list (firts bigger compartment, then smaller) - when(model.getCompartments()).thenReturn(list); - when(model.getModelData()).thenReturn(md); - - Species alias = new Complex(testAliasId); - alias.setX(10); - alias.setY(10); - alias.setWidth(100); - alias.setHeight(100); - alias.setModel(model); - alias.setActivity(true); - - elements.addElement(new CellDesignerComplexSpecies(testSpeciesId)); - model.addElement(alias); - SpeciesAliasXmlParser parser = new SpeciesAliasXmlParser(elements, model); - - String xml = parser.toXml(alias); - - assertTrue(xml.contains(testAliasId)); - assertTrue(xml.contains(testCompartmentAliasId2)); - assertTrue(xml.contains("<celldesigner:activity>active</celldesigner:activity>")); - - } catch (Exception e) { - e.printStackTrace(); - throw e; - } - } + static Logger logger = Logger.getLogger(SpeciesAliasXmlParser.class); + + Model model; + private SpeciesAliasXmlParser parser; + + private String testCompartmentAliasId2 = "s3"; + private String testCompartmentAliasId = "s4"; + private String testSpeciesId = "s5"; + private String testAliasId = "s6"; + CellDesignerElementCollection elements; + + @Before + public void setUp() throws Exception { + elements = new CellDesignerElementCollection(); + + model = createStubModel(); + + CellDesignerGenericProtein species = new CellDesignerGenericProtein(); + species.setElementId("s78"); + elements.addElement(species); + + parser = new SpeciesAliasXmlParser(elements, model); + } + + private Model createStubModel() { + Model model = new ModelFullIndexed(null); + model.addElement(new Compartment("ca1")); + return model; + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testParseXmlAliasNode() throws Exception { + try { + String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias.xml"); + Species alias = parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); + assertEquals(false, alias.getActivity()); + assertEquals("sa36", alias.getElementId()); + assertEquals(16.0, alias.getFontSize(), 1e-6); + assertEquals(25.0, alias.getHeight(), 1e-6); + assertEquals(80, alias.getWidth(), 1e-6); + assertEquals(11813.0, alias.getX(), 1e-6); + assertEquals(2840.5, alias.getY(), 1e-6); + assertEquals("ca1", alias.getCompartment().getElementId()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseXmlAliasFont() throws Exception { + try { + String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias_with_font.xml"); + Species alias = parser.parseXmlAlias(xmlString); + assertEquals(30.0, alias.getFontSize(), 1e-6); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testToXml() throws Exception { + try { + Model model2 = createStubModel(); + Species protein = createProtein(); + protein.setCompartment(model2.getCompartments().iterator().next()); + elements.addElement(new CellDesignerGenericProtein(elements.getElementId(protein))); + String xmlString = parser.toXml(protein); + + parser = new SpeciesAliasXmlParser(elements, model2); + Species alias2 = parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); + + assertEquals(protein.getActivity(), alias2.getActivity()); + assertEquals(protein.getElementId(), alias2.getElementId()); + assertEquals(protein.getFontSize(), alias2.getFontSize(), 1e-6); + assertEquals(protein.getHeight(), alias2.getHeight(), 1e-6); + assertEquals(protein.getWidth(), alias2.getWidth(), 1e-6); + assertEquals(protein.getX(), alias2.getX(), 1e-6); + assertEquals(protein.getY(), alias2.getY(), 1e-6); + assertEquals(protein.getCompartment().getElementId(), alias2.getCompartment().getElementId()); + assertEquals("Alias state label different", protein.getStateLabel(), alias2.getStateLabel()); + assertEquals("Alias state prefix different", protein.getStatePrefix(), alias2.getStatePrefix()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + private Species createProtein() { + GenericProtein protein = new GenericProtein("id"); + protein.setActivity(true); + protein.setFontSize(4); + protein.setHeight(10); + protein.setWidth(20); + protein.setX(30); + protein.setY(40); + protein.setStateLabel("xxx"); + protein.setStatePrefix("yyy"); + return protein; + } + + @Test + public void testToXmlAliasWithStateNode() throws Exception { + try { + Model model = createStubModel(); + Species protein = createProtein(); + protein.setState("sssstate"); + protein.setCompartment(model.getCompartments().iterator().next()); + elements.addElement(new CellDesignerGenericProtein(elements.getElementId(protein))); + String xmlString = parser.toXml(protein); + + Species alias2 = parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); + + assertEquals("Alias state label different", protein.getStateLabel(), alias2.getStateLabel()); + assertEquals("Alias state prefix different", protein.getStatePrefix(), alias2.getStatePrefix()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseXmlAliasWithStateNode() throws Exception { + try { + String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias_with_state.xml"); + Species alias = parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); + assertNotNull(alias); + assertEquals("test", alias.getStateLabel()); + assertEquals("free input", alias.getStatePrefix()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseXmlAliasWithoutStateNode() throws Exception { + try { + String xmlString = readFile("testFiles/xmlNodeTestExamples/species_alias_without_state.xml"); + Species alias = parser.parseXmlAlias(xmlString); + assertEquals(0, getWarnings().size()); + assertNotNull(alias); + assertNull(alias.getStateLabel()); + assertNull(alias.getStatePrefix()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlAliasNode() throws Exception { + try { + String xmlString = readFile("testFiles/invalid/species_alias.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expected"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("Unknown species for alias")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlAliasNode2() throws Exception { + try { + String xmlString = readFile("testFiles/invalid/species_alias2.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expected"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("Unknown element of celldesigner:speciesAlias")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlAliasNode3() throws Exception { + try { + String xmlString = readFile("testFiles/invalid/species_alias3.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expected"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("No view in Alias")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlAliasNode4() throws Exception { + try { + parser = new SpeciesAliasXmlParser(elements, model); + + String xmlString = readFile("testFiles/invalid/species_alias4.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expected"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("CompartmentAlias does not exist")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlAliasNode5() throws Exception { + try { + parser = new SpeciesAliasXmlParser(elements, model); + + String xmlString = readFile("testFiles/invalid/species_alias5.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expected"); + } catch (InvalidXmlSchemaException e) { + assertTrue(e.getMessage().contains("ComplexAlias does not exist")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testParseInvalidXmlAliasNode6() throws Exception { + try { + parser = new SpeciesAliasXmlParser(elements, model); + + String xmlString = readFile("testFiles/invalid/species_alias6.xml"); + parser.parseXmlAlias(xmlString); + fail("Exception expected"); + } catch (NotImplementedException e) { + assertTrue(e.getMessage().contains("Unkown alias state")); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testToXmlWithUnknownCompartment() throws Exception { + try { + Model model = Mockito.mock(ModelFullIndexed.class); + ModelData md = new ModelData(); + md.setModel(model); + + Compartment ca2 = new Compartment(testCompartmentAliasId2); + ca2.setElementId(testCompartmentAliasId2); + ca2.setX(6); + ca2.setY(6); + ca2.setWidth(190); + ca2.setHeight(190); + + Compartment ca = new Compartment(testCompartmentAliasId); + ca.setElementId(testCompartmentAliasId); + ca.setX(5); + ca.setY(5); + ca.setWidth(200); + ca.setHeight(200); + + List<Compartment> list = new ArrayList<>(); + list.add(ca); + list.add(ca2); + + // ensure that we return list (firts bigger compartment, then smaller) + when(model.getCompartments()).thenReturn(list); + when(model.getModelData()).thenReturn(md); + + Species alias = new Complex(testAliasId); + alias.setX(10); + alias.setY(10); + alias.setWidth(100); + alias.setHeight(100); + alias.setModel(model); + alias.setActivity(true); + + elements.addElement(new CellDesignerComplexSpecies(testSpeciesId)); + model.addElement(alias); + SpeciesAliasXmlParser parser = new SpeciesAliasXmlParser(elements, model); + + String xml = parser.toXml(alias); + + assertTrue(xml.contains(testAliasId)); + assertTrue(xml.contains(testCompartmentAliasId2)); + assertTrue(xml.contains("<celldesigner:activity>active</celldesigner:activity>")); + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } } diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionFromXmlTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionFromXmlTest.java index 6b027c8e0f..5828d1ac3e 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionFromXmlTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionFromXmlTest.java @@ -452,7 +452,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { try { // test situation when createProperTypeReaction returns reaction of // unknown type - ReactionFromXml parser = new ReactionFromXml(false) { + ReactionFromXml parser = new ReactionFromXml(null, false) { Reaction createProperTypeReaction(String type, Reaction result) throws UnknownReactionClassException { return result; } @@ -483,7 +483,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { } } - ReactionFromXml parser = new ReactionFromXml(false) { + ReactionFromXml parser = new ReactionFromXml(null, false) { Reaction createProperTypeReaction(String type, Reaction result) throws UnknownReactionClassException { return new NewReactionType(result); } @@ -507,7 +507,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { // test situation when createOperatorsForTwoProductReaction encounter // reaction with two many base reactants - ReactionFromXml parser = new ReactionFromXml(false) { + ReactionFromXml parser = new ReactionFromXml(null, false) { Reaction createProperTypeReaction(String type, Reaction result) throws UnknownReactionClassException { Reaction r = super.createProperTypeReaction(type, result); r.addReactant(new Reactant()); @@ -533,7 +533,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { // test situation when createOperatorsForTwoProductReaction encounter // reaction with two many base products - ReactionFromXml parser = new ReactionFromXml(false) { + ReactionFromXml parser = new ReactionFromXml(null, false) { Reaction createProperTypeReaction(String type, Reaction result) throws UnknownReactionClassException { Reaction r = super.createProperTypeReaction(type, result); r.addProduct(new Product()); @@ -567,7 +567,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { } } - ReactionFromXml parser = new ReactionFromXml(false) { + ReactionFromXml parser = new ReactionFromXml(null, false) { Reaction createProperTypeReaction(String type, Reaction result) throws UnknownReactionClassException { return new NewReactionType(result); } @@ -590,7 +590,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { // test situation when createOperatorsForTwoReactantReaction encounter // reaction with two many base reactants - ReactionFromXml parser = new ReactionFromXml(false) { + ReactionFromXml parser = new ReactionFromXml(null, false) { Reaction createProperTypeReaction(String type, Reaction result) throws UnknownReactionClassException { Reaction r = super.createProperTypeReaction(type, result); r.addReactant(new Reactant()); @@ -615,7 +615,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { // test situation when createOperatorsForTwoReactantReaction encounter // reaction with two many base products - ReactionFromXml parser = new ReactionFromXml(false) { + ReactionFromXml parser = new ReactionFromXml(null, false) { Reaction createProperTypeReaction(String type, Reaction result) throws UnknownReactionClassException { Reaction r = super.createProperTypeReaction(type, result); r.addProduct(new Product()); @@ -637,7 +637,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { @Test public void testParseInvalidEditPointsString() throws Exception { try { - ReactionFromXml parser = new ReactionFromXml(false); + ReactionFromXml parser = new ReactionFromXml(null, false); parser.parseEditPointsString("1"); fail("Exception expected"); @@ -652,7 +652,7 @@ public class ReactionFromXmlTest extends CellDesignerTestFunctions { @Test public void testParseInvalidEditPointsString2() throws Exception { try { - ReactionFromXml parser = new ReactionFromXml(false); + ReactionFromXml parser = new ReactionFromXml(null, false); parser.parseEditPointsString("1,Infinity"); fail("Exception expected"); diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionParserTests.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionParserTests.java index f9f7d55853..a62c5c340e 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionParserTests.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/reaction/ReactionParserTests.java @@ -1856,4 +1856,16 @@ public class ReactionParserTests extends CellDesignerTestFunctions { } } + @Test + public void testKinetcsWithCompartment() throws Exception { + try { + Model model = getModelForFile("testFiles/reactions/kinetics_with_compartment.xml"); + Reaction reaction = model.getReactionByReactionId("re1"); + assertNotNull(reaction.getKinetics()); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + } diff --git a/converter-CellDesigner/testFiles/reactions/kinetics_with_compartment.xml b/converter-CellDesigner/testFiles/reactions/kinetics_with_compartment.xml new file mode 100644 index 0000000000..5bc746a066 --- /dev/null +++ b/converter-CellDesigner/testFiles/reactions/kinetics_with_compartment.xml @@ -0,0 +1,189 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" xmlns:celldesigner="http://www.sbml.org/2001/ns/celldesigner" level="2" version="4"> +<model metaid="untitled" id="untitled"> +<annotation> +<celldesigner:extension> +<celldesigner:modelVersion>4.0</celldesigner:modelVersion> +<celldesigner:modelDisplay sizeX="600" sizeY="400"/> +<celldesigner:listOfCompartmentAliases> +<celldesigner:compartmentAlias id="ca1" compartment="c1"> +<celldesigner:class>SQUARE</celldesigner:class> +<celldesigner:bounds x="46.0" y="105.0" w="413.0" h="201.0"/> +<celldesigner:namePoint x="244.0" y="270.5"/> +<celldesigner:doubleLine thickness="12.0" outerWidth="2.0" innerWidth="1.0"/> +<celldesigner:paint color="ffcccc00" scheme="Color"/> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:compartmentAlias> +</celldesigner:listOfCompartmentAliases> +<celldesigner:listOfComplexSpeciesAliases/> +<celldesigner:listOfSpeciesAliases> +<celldesigner:speciesAlias id="sa1" species="s1" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="67.0" y="151.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="21.0" y="46.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa2" species="s2" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="296.0" y="174.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="250.0" y="69.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +</celldesigner:listOfSpeciesAliases> +<celldesigner:listOfGroups/> +<celldesigner:listOfProteins> +<celldesigner:protein id="pr1" name="s1" type="GENERIC"/> +<celldesigner:protein id="pr2" name="s2" type="GENERIC"/> +</celldesigner:listOfProteins> +<celldesigner:listOfGenes/> +<celldesigner:listOfRNAs/> +<celldesigner:listOfAntisenseRNAs/> +<celldesigner:listOfLayers/> +<celldesigner:listOfBlockDiagrams/> +</celldesigner:extension> +</annotation> +<listOfUnitDefinitions> +<unitDefinition metaid="substance" id="substance" name="substance"> +<listOfUnits> +<unit metaid="CDMT00004" kind="mole"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="volume" id="volume" name="volume"> +<listOfUnits> +<unit metaid="CDMT00005" kind="litre"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="area" id="area" name="area"> +<listOfUnits> +<unit metaid="CDMT00006" kind="metre" exponent="2"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="length" id="length" name="length"> +<listOfUnits> +<unit metaid="CDMT00007" kind="metre"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="time" id="time" name="time"> +<listOfUnits> +<unit metaid="CDMT00008" kind="second"/> +</listOfUnits> +</unitDefinition> +</listOfUnitDefinitions> +<listOfCompartments> +<compartment metaid="default" id="default" size="1" units="volume"/> +<compartment metaid="c1" id="c1" name="c1" size="1" units="volume" outside="default"> +<annotation> +<celldesigner:extension> +<celldesigner:name>c1</celldesigner:name> +</celldesigner:extension> +</annotation> +</compartment> +</listOfCompartments> +<listOfSpecies> +<species metaid="s1" id="s1" name="s1" compartment="c1" initialAmount="0"> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr1</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s2" id="s2" name="s2" compartment="c1" initialAmount="0"> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr2</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +</listOfSpecies> +<listOfReactions> +<reaction metaid="re1" id="re1" reversible="false" fast="false"> +<annotation> +<celldesigner:extension> +<celldesigner:reactionType>STATE_TRANSITION</celldesigner:reactionType> +<celldesigner:baseReactants> +<celldesigner:baseReactant species="s1" alias="sa1"/> +</celldesigner:baseReactants> +<celldesigner:baseProducts> +<celldesigner:baseProduct species="s2" alias="sa2"/> +</celldesigner:baseProducts> +<celldesigner:connectScheme connectPolicy="direct" rectangleIndex="0"> +<celldesigner:listOfLineDirection> +<celldesigner:lineDirection index="0" value="unknown"/> +</celldesigner:listOfLineDirection> +</celldesigner:connectScheme> +<celldesigner:line width="1.0" color="ff000000"/> +</celldesigner:extension> +</annotation> +<listOfReactants> +<speciesReference metaid="CDMT00001" species="s1"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa1</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfReactants> +<listOfProducts> +<speciesReference metaid="CDMT00002" species="s2"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa2</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfProducts> +<kineticLaw metaid="CDMT00003"> +<math xmlns="http://www.w3.org/1998/Math/MathML"> +<apply> +<divide/> +<apply> +<times/> +<ci> c1 </ci> +<apply> +<plus/> +<ci> s1 </ci> +<ci> s2 </ci> +</apply> +</apply> +<cn type="integer"> 2 </cn> +</apply> +</math> +</kineticLaw> +</reaction> +</listOfReactions> +</model> +</sbml> 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 190f1c84fb..8b7657a831 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 @@ -351,7 +351,7 @@ public abstract class Element implements BioEntity, Serializable, SbmlArgument { * Parse and set font size. * * @param string - * text representing font sizee + * text representing font size * @see fontSize */ public void setFontSize(String string) { -- GitLab