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

export to xml improved (additional field data added)

parent f8a7ea7e
No related branches found
No related tags found
1 merge request!30Fixes on showing semantic in compartments
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:
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment