import org.forester.io.parsers.phyloxml.PhyloXmlMapping;
import org.forester.util.ForesterUtil;
-public final class Accession implements PhylogenyData {
+public final class Accession implements PhylogenyData, Comparable<Accession> {
- final private String _value;
+ final private String _comment;
final private String _source;
- final private String _value_source;
+ final private String _source_value;
+ final private String _value;
+
+ public enum Source {
+ NCBI, REFSEQ, UNIPROT, GI, EMBL, UNKNOWN;
+
+ @Override
+ public String toString() {
+ switch ( this ) {
+ case NCBI:
+ return "ncbi";
+ case REFSEQ:
+ return "refseq";
+ case UNIPROT:
+ return "uniprot";
+ case GI:
+ return "gi";
+ case EMBL:
+ return "embl";
+ case UNKNOWN:
+ return "unknown";
+ default:
+ throw new IllegalArgumentException();
+ }
+ }
+ }
+
+ public Accession( final String value ) {
+ _value = value;
+ _source = "";
+ _comment = "";
+ _source_value = value;
+ }
public Accession( final String value, final String source ) {
_value = value;
_source = source;
+ _comment = "";
+ if ( source != null ) {
+ _source_value = source + value;
+ }
+ else {
+ _source_value = value;
+ }
+ }
+
+ public Accession( final String value, final Source source ) {
+ _value = value;
+ _source = source.toString();
+ _comment = "";
+ _source_value = source + value;
+ }
+
+ public Accession( final String value, final String source, final String comment ) {
+ _value = value;
+ _source = source;
+ _comment = comment;
if ( source != null ) {
- _value_source = value + source;
+ _source_value = source + value;
}
else {
- _value_source = value;
+ _source_value = value;
}
}
public StringBuffer asText() {
final StringBuffer sb = new StringBuffer();
if ( !ForesterUtil.isEmpty( getSource() ) ) {
- sb.append( "[" );
sb.append( getSource() );
- sb.append( "] " );
+ sb.append( ": " );
}
sb.append( getValue() );
+ if ( !ForesterUtil.isEmpty( getComment() ) ) {
+ sb.append( " (" );
+ sb.append( getComment() );
+ sb.append( ")" );
+ }
return sb;
}
@Override
+ public int compareTo( final Accession o ) {
+ if ( equals( o ) ) {
+ return 0;
+ }
+ return _source_value.compareTo( o._source_value );
+ }
+
+ @Override
public PhylogenyData copy() {
- return new Accession( getValue() , getSource() );
+ return new Accession( getValue(), getSource() );
}
@Override
}
}
+ public String getComment() {
+ return _comment;
+ }
+
public String getSource() {
return _source;
}
@Override
public int hashCode() {
- //if ( getSource() != null ) {
- // return ( getSource() + getValue() ).hashCode();
- // }
- return _value_source.hashCode();
+ return _source_value.hashCode();
}
@Override
@Override
public void toPhyloXML( final Writer writer, final int level, final String indentation ) throws IOException {
if ( ForesterUtil.isEmpty( getSource() ) ) {
- PhylogenyDataUtil.appendElement( writer,
- PhyloXmlMapping.ACCESSION,
- getValue(),
- PhyloXmlMapping.ACCESSION_SOURCE_ATTR,
- "unknown",
- indentation );
+ if ( ForesterUtil.isEmpty( getComment() ) ) {
+ PhylogenyDataUtil.appendElement( writer,
+ PhyloXmlMapping.ACCESSION,
+ getValue(),
+ PhyloXmlMapping.ACCESSION_SOURCE_ATTR,
+ "unknown",
+ indentation );
+ }
+ else {
+ PhylogenyDataUtil.appendElement( writer,
+ PhyloXmlMapping.ACCESSION,
+ getValue(),
+ PhyloXmlMapping.ACCESSION_SOURCE_ATTR,
+ "unknown",
+ PhyloXmlMapping.ACCESSION_COMMENT_ATTR,
+ getComment(),
+ indentation );
+ }
}
else {
- PhylogenyDataUtil.appendElement( writer,
- PhyloXmlMapping.ACCESSION,
- getValue(),
- PhyloXmlMapping.ACCESSION_SOURCE_ATTR,
- getSource(),
- indentation );
+ if ( ForesterUtil.isEmpty( getComment() ) ) {
+ PhylogenyDataUtil.appendElement( writer,
+ PhyloXmlMapping.ACCESSION,
+ getValue(),
+ PhyloXmlMapping.ACCESSION_SOURCE_ATTR,
+ getSource(),
+ indentation );
+ }
+ else {
+ PhylogenyDataUtil.appendElement( writer,
+ PhyloXmlMapping.ACCESSION,
+ getValue(),
+ PhyloXmlMapping.ACCESSION_SOURCE_ATTR,
+ getSource(),
+ PhyloXmlMapping.ACCESSION_COMMENT_ATTR,
+ getComment(),
+ indentation );
+ }
}
}