From 37b3208fe8664396af3c34fc08ff48c7474de1f5 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Tue, 20 Jun 2017 14:03:53 +0200 Subject: [PATCH] export to xml improved (additional field data added) --- .../annotation/RestAnnotationParser.java | 96 ++++++++++++++++--- .../annotation/RestAnnotationParserTest.java | 12 ++- 2 files changed, 93 insertions(+), 15 deletions(-) diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParser.java index a1ab11fc4a..ccec089ae5 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParser.java @@ -1,6 +1,7 @@ package lcsb.mapviewer.converter.model.celldesigner.annotation; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -21,6 +22,8 @@ import lcsb.mapviewer.common.comparator.StringSetComparator; import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.common.exception.InvalidXmlSchemaException; import lcsb.mapviewer.common.exception.NotImplementedException; +import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerElement; +import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerSpecies; import lcsb.mapviewer.model.map.AnnotatedObject; import lcsb.mapviewer.model.map.MiriamData; import lcsb.mapviewer.model.map.MiriamRelationType; @@ -100,25 +103,90 @@ public class RestAnnotationParser extends XmlParser { * @return note string with structural information about element */ public String createAnnotationString(Element element) { - String symbol = element.getSymbol(); - if (symbol == null) { - symbol = ""; - } - String name = element.getFullName(); - if (name == null) { - name = ""; - } + return createAnnotationString(element, false); + } + + /** + * Creates note string with structural information about element. + * + * @param element + * element for which notes are created + * @param forceFullInfo + * when true annotation string will contain information about empty + * fields + * @return note string with structural information about element + */ + public String createAnnotationString(Element element, boolean forceFullInfo) { + Set<MiriamData> data = element.getMiriamData(); StringBuilder sb = new StringBuilder(); - sb.append(NoteField.SYMBOL.getCommonName() + ": " + symbol + "\n"); - sb.append(NoteField.NAME.getCommonName() + ": " + name + "\n"); - // descrfiption will be in the string anyways so we don't need to repeat it - sb.append(NoteField.DESCRIPTION.getCommonName() + ": \n"); - sb.append(NoteField.PREVIOUS_SYMBOLS.getCommonName() + ": " + StringUtils.join(element.getFormerSymbols(), ", ") + "\n"); - sb.append(NoteField.SYNONYMS.getCommonName() + ": " + StringUtils.join(element.getSynonyms(), ", ") + "\n"); + sb.append(createEntry(NoteField.SYMBOL, element.getSymbol(), forceFullInfo)); + sb.append(createEntry(NoteField.NAME, element.getFullName(), forceFullInfo)); + sb.append(createEntry(NoteField.PREVIOUS_SYMBOLS, element.getFormerSymbols(), forceFullInfo)); + sb.append(createEntry(NoteField.SYNONYMS, element.getSynonyms(), forceFullInfo)); + sb.append(createEntry(NoteField.HGNC, filterMiriam(data, MiriamType.HGNC), forceFullInfo)); + sb.append(createEntry(NoteField.ENTREZ, filterMiriam(data, MiriamType.ENTREZ), forceFullInfo)); + sb.append(createEntry(NoteField.REFSEQ, filterMiriam(data, MiriamType.REFSEQ), forceFullInfo)); + sb.append(createEntry(NoteField.REACTOME, filterMiriam(data, MiriamType.REACTOME), forceFullInfo)); + sb.append(createEntry(NoteField.PUBMED, filterMiriam(data, MiriamType.PUBMED), forceFullInfo)); + sb.append(createEntry(NoteField.KEGG_GENES, filterMiriam(data, MiriamType.KEGG_GENES), forceFullInfo)); + sb.append(createEntry(NoteField.PANTHER, filterMiriam(data, MiriamType.PANTHER), forceFullInfo)); + sb.append(createEntry(NoteField.DESCRIPTION, null, forceFullInfo)); + sb.append(createEntry(NoteField.ABBREVIATION, element.getAbbreviation(), forceFullInfo)); + sb.append(createEntry(NoteField.SEMANTIC_ZOOM_LEVEL_VISIBILITY, element.getSemanticZoomLevelVisibility(), forceFullInfo)); + sb.append(createEntry(NoteField.CHARGED_FORMULA, element.getFormula(), forceFullInfo)); + if (element instanceof Species) { + sb.append(createEntry(NoteField.CHARGE, ((Species) element).getCharge(), forceFullInfo)); + } + sb.append("\n"); return sb.toString(); } + private List<MiriamData> filterMiriam(Collection<MiriamData> miriamDataSet, MiriamType type) { + List<MiriamData> result = new ArrayList<>(); + for (MiriamData miriamData : miriamDataSet) { + if (miriamData.getDataType().equals(type)) { + result.add(miriamData); + } + } + return result; + } + + private String createEntry(NoteField type, Object value, boolean forceFullInfo) { + if (value == null) { + if (forceFullInfo) { + return type.getCommonName() + ": \n"; + } else { + return ""; + } + } else if (value instanceof String) { + return type.getCommonName() + ": " + value + "\n"; + } else if (value instanceof Integer) { + return type.getCommonName() + ": " + value + "\n"; + } else if (value instanceof Collection) { + Collection<?> collection = (Collection) value; + if (collection.size() > 0 || forceFullInfo) { + String result = ""; + for (Object object : collection) { + if (!result.equals("")) { + result = result + ", "; + } + if (object instanceof MiriamData) { + result += ((MiriamData) object).getResource(); + } else { + result += object; + } + + } + return type.getCommonName() + ": " + result + "\n"; + } else { + return ""; + } + } else { + throw new InvalidArgumentException("Unknown class type: " + value.getClass()); + } + } + /** * Returns value for the type of the structurized annotation. Structurized * annotation is in format: diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java index f8ab6d2d44..6cca1af6e5 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java @@ -22,6 +22,7 @@ import org.w3c.dom.Node; import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.common.exception.NotImplementedException; import lcsb.mapviewer.converter.model.celldesigner.CellDesignerTestFunctions; +import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerElement; import lcsb.mapviewer.model.map.AnnotatedObject; import lcsb.mapviewer.model.map.MiriamData; import lcsb.mapviewer.model.map.MiriamRelationType; @@ -286,10 +287,19 @@ public class RestAnnotationParserTest extends CellDesignerTestFunctions { GenericProtein element = new GenericProtein("id"); element.addFormerSymbol(former1); element.addFormerSymbol(former2); - String str = rap.createAnnotationString(element); + element.setCharge(1); + String str = rap.createAnnotationString(element, true); + logger.debug(str); assertTrue(str.contains(former1)); assertTrue(str.contains(former2)); + for (NoteField field : NoteField.values()) { + if (field.getClazz().isAssignableFrom(element.getClass()) || CellDesignerElement.class.isAssignableFrom(field.getClazz())) { + assertTrue("Export string doesn't contain info about: " + field.getCommonName(), str.indexOf(field.getCommonName()) >= 0); + } + + } + } catch (Exception e) { e.printStackTrace(); throw e; -- GitLab