package org.nextprot.api.core.domain.annotation;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class AnnotationVariant implements Serializable {
private static final long serialVersionUID = -2952120392107319047L;
private String original;
private String variant;
private String rawDescription;
private String description = null; // set by parsing rawDescription
private List<String> diseaseTerms = null; // set by parsing rawDescription
// TODO: [original|variantAminoAcid never used] ; discuss about the usage of originalAminoAcid and variantAminoAcid as they can be empty, single or multiple
/*
public String getOriginalAminoAcid() {
return originalAminoAcid;
}
public void setOriginalAminoAcid(String originalAminoAcid) {
this.originalAminoAcid = originalAminoAcid;
}
public String getVariantAminoAcid() {
return variantAminoAcid;
}
public void setVariantAminoAcid(String variantAminoAcid) {
this.variantAminoAcid = variantAminoAcid;
}
private String originalAminoAcid;
private String variantAminoAcid;
*/
@Deprecated //TODO See with Fred AminoAcidCode which can be null, -, multiple ...
public AnnotationVariant(String original, String variant) {
this.original = original;
this.variant = variant;
}
public AnnotationVariant(String original, String variant, String rawDescription) {
super();
this.original = original;
this.variant = variant;
// Commenting code that is never used: see [original|variantAminoAcid never used] comment above
//this.originalAminoAcid = AminoAcidCode.valueOfOneLetterCode(original.charAt(0)).get3LetterCode();
//this.variantAminoAcid = AminoAcidCode.valueOfOneLetterCode(variant.charAt(0)).get3LetterCode();
this.rawDescription = rawDescription;
parseRawDescription();
}
public String getOriginal() {
return original;
}
public void setOriginal(String original) {
this.original = original;
}
public String getVariant() {
return variant;
}
public void setVariant(String variant) {
this.variant = variant;
}
public void setRawDescription(String rawDescription) {
this.rawDescription=rawDescription;
}
public String getDescription() {
return this.description;
}
public List<String> getDiseaseTerms() {
return this.diseaseTerms;
}
private void addDiseaseTerm(String term) {
if (diseaseTerms==null) diseaseTerms=new ArrayList<String>();
diseaseTerms.add(term);
}
/*
* turns the raw description of a variant into a list of disease terms and a description
*
*/
private void parseRawDescription() {
final String pattern = "UNIPROT_DISEASE:";
if (rawDescription==null) return;
String text = rawDescription;
int idx=0;
while(true) {
int pos = text.indexOf(pattern,idx);
if (pos<0) break;
int p1 = pos + pattern.length();
addDiseaseTerm(text.substring(p1,p1+8));
idx=p1+8;
}
if (idx==0) {
description=text.trim();
} else {
idx = text.indexOf("]",idx);
text=text.substring(idx+1);
// we expect <.> or <;> after last <]> in raw description
if (text.startsWith(".")) text=text.substring(1);
if (text.startsWith(";")) text=text.substring(1);
text=text.trim(); // remove trimming spaces
if (text.length()==0) text=null;
description=text;
}
}
}