package org.nextprot.api.core.domain;
import org.nextprot.api.commons.constants.TerminologyMapping;
import org.nextprot.api.commons.utils.StringUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.nextprot.api.core.utils.TerminologyUtils;
public class CvTerm implements Serializable {
private static final long serialVersionUID = 4404147147281845675L;
private Long id;
private String accession;
private String name;
private String description;
private String ontology;
private String ontologyAltname;
//private List<String> sameAs = new ArrayList<>();
private List<String> parentAccession;
private List<String> childAccession;
private List<DbXref> xrefs;
private List<String> synonyms;
private List<TermProperty> properties;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAccession() {
return accession;
}
public void setAccession(String accession) {
this.accession = accession.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getSynonyms() {
return synonyms;
}
public void setSynonyms(String synonyms) {
if (synonyms == null)
return;
List<String> allsyn = Arrays.asList(synonyms.split("\\|"));
this.synonyms = allsyn;
}
public List<TermProperty> getProperties() {
return properties;
}
public void setProperties(List<TermProperty> properties) {
this.properties = properties;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getOntology() {
String o = StringUtils.toCamelCase(ontology, false);
try {
if(o != null) {
return TerminologyMapping.valueOf(o).getDescription();
}else return ontology;
} catch (IllegalArgumentException e) {
return ontology;
}
}
public void setOntology(String ontology) {
this.ontology = ontology;
}
public String getOntologyAltname() {
return ontologyAltname;
}
public void setOntologyAltname(String ontologyAltname) {
this.ontologyAltname = ontologyAltname;
}
public List<String> getChildAccession() {
return childAccession;
}
public void setChildAccession(String accession) {
if (accession == null)
return;
List<String> all = Arrays.asList(accession.split("\\|"));
this.childAccession = all;
}
public List<String> getAncestorAccession() {
return parentAccession;
}
public void setAncestorAccession(String accession) {
if (accession == null)
return;
List<String> all = Arrays.asList(accession.split("\\|"));
this.parentAccession = all;
}
public List<DbXref> getXrefs() {
return xrefs;
}
public List<DbXref> getFilteredXrefs(String category) {
if(xrefs == null) return null;
List<DbXref> filteredxrefs = new ArrayList<DbXref>();
for (DbXref currxref : xrefs) {
if(currxref.getDatabaseCategory().equals(category)) filteredxrefs.add(currxref);
}
if(filteredxrefs.size() == 0) return null;
return filteredxrefs;
}
public void setXrefs(List<DbXref> xrefs) {
this.xrefs = xrefs;
}
public List<String> getSameAs() {
// To remain compatible with previous API version (Terminology.getAameAs() is used for ttl generation in term.ttl.vm )
return TerminologyUtils.convertXrefsToSameAsStrings(getFilteredXrefs("Ontologies"));
}
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("id=");
sb.append(this.id);
sb.append("\n");
sb.append("accession=");
sb.append(this.accession);
sb.append("\n");
sb.append("name=");
sb.append(this.name);
sb.append("\n");
sb.append("description=");
sb.append(this.description);
sb.append("\n");
sb.append("synonyms=");
sb.append(this.synonyms);
sb.append("\n");
sb.append("xrefs=");
sb.append(TerminologyUtils.convertXrefsToString(this.getXrefs()));
sb.append("\n");
sb.append("sameAs=");
sb.append(this.getSameAs());
sb.append("\n");
sb.append("properties=");
sb.append(TerminologyUtils.convertPropertiesToString(this.getProperties()));
sb.append("\n");
sb.append("ontology=");
sb.append(this.ontology);
sb.append("\n");
sb.append("ontologyAltname=");
sb.append(this.ontologyAltname);
sb.append("\n");
sb.append("ancestors=");
sb.append(this.parentAccession);
sb.append("\n");
return sb.toString();
}
public static class TermProperty implements Serializable {
private static final long serialVersionUID = 5662052927182501529L;
private long termId;
private String propertyName;
private String propertyValue;
public long gettermId() {
return termId;
}
public void settermId(long termId) {
this.termId = termId;
}
public String getPropertyName() {
return propertyName;
}
public void setPropertyName(String propertyName) {
this.propertyName = propertyName;
}
public String getPropertyValue() {
return propertyValue;
}
public void setPropertyValue(String propertyValue) {
this.propertyValue = propertyValue;
}
}
}