X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fphylogeny%2Fdata%2FSequence.java;h=fd366c618af33de2a6c4fe6a54712243ee521cbd;hb=10297bd8b8a4b4ab198a17a42fc6ff24ae2ed49b;hp=25f7e70fc2f2e85e31d5355ad062e19e5461072b;hpb=7e2a839d55608212fed645ce9ffe3a3f4952fb17;p=jalview.git diff --git a/forester/java/src/org/forester/phylogeny/data/Sequence.java b/forester/java/src/org/forester/phylogeny/data/Sequence.java index 25f7e70..fd366c6 100644 --- a/forester/java/src/org/forester/phylogeny/data/Sequence.java +++ b/forester/java/src/org/forester/phylogeny/data/Sequence.java @@ -37,36 +37,54 @@ import org.forester.io.parsers.phyloxml.PhyloXmlDataFormatException; import org.forester.io.parsers.phyloxml.PhyloXmlMapping; import org.forester.io.parsers.phyloxml.PhyloXmlUtil; import org.forester.io.writers.PhylogenyWriter; +import org.forester.sequence.MolecularSequence; +import org.forester.sequence.MolecularSequence.TYPE; import org.forester.util.ForesterUtil; -public class Sequence implements PhylogenyData, MultipleUris { +public class Sequence implements PhylogenyData, MultipleUris, Comparable { + private Accession _accession; + private SortedSet _annotations; + private DomainArchitecture _da; + private String _gene_name; + private String _location; private String _mol_sequence; private boolean _mol_sequence_is_aligned; private String _name; - private String _gene_name; + private List _seq_relations; private String _source_id; - private Accession _accession; private String _symbol; - private String _location; private String _type; - private SortedSet _annotations; - private DomainArchitecture _da; private List _uris; - private List _seq_relations; private SortedSet _xrefs; public Sequence() { init(); } - public boolean isEmpty() { - return ( getAccession() == null ) && ForesterUtil.isEmpty( getName() ) && ForesterUtil.isEmpty( getSymbol() ) - && ForesterUtil.isEmpty( getType() ) && ForesterUtil.isEmpty( getLocation() ) - && ForesterUtil.isEmpty( getSourceId() ) && ForesterUtil.isEmpty( getMolecularSequence() ) - && ( getDomainArchitecture() == null ) && ForesterUtil.isEmpty( _annotations ) - && ForesterUtil.isEmpty( _uris ) && ForesterUtil.isEmpty( _seq_relations ) - && ( ( getCrossReferences() == null ) || getCrossReferences().isEmpty() ); + public Sequence( final MolecularSequence mol_seq ) { + init(); + setMolecularSequence( mol_seq.getMolecularSequenceAsString() ); + setName( mol_seq.getIdentifier() ); + String type; + if ( mol_seq.getType() == TYPE.AA ) { + type = "protein"; + } + else if ( mol_seq.getType() == TYPE.DNA ) { + type = "dna"; + } + else if ( mol_seq.getType() == TYPE.RNA ) { + type = "rna"; + } + else { + throw new IllegalArgumentException( "unknown sequence type " + mol_seq.getType() ); + } + try { + setType( type ); + } + catch ( final PhyloXmlDataFormatException e ) { + throw new IllegalArgumentException( "don't know how to handle type " + mol_seq.getType() ); + } } public void addAnnotation( final Annotation annotation ) { @@ -80,12 +98,8 @@ public class Sequence implements PhylogenyData, MultipleUris { getCrossReferences().add( cross_reference ); } - public SortedSet getCrossReferences() { - return _xrefs; - } - - private void setCrossReferences( final TreeSet cross_references ) { - _xrefs = cross_references; + public void addSequenceRelation( final SequenceRelation sr ) { + getSequenceRelations().add( sr ); } @Override @@ -96,10 +110,6 @@ public class Sequence implements PhylogenyData, MultipleUris { getUris().add( uri ); } - public void addSequenceRelation( final SequenceRelation sr ) { - _seq_relations.add( sr ); - } - @Override public StringBuffer asSimpleText() { final StringBuffer sb = new StringBuffer(); @@ -123,9 +133,32 @@ public class Sequence implements PhylogenyData, MultipleUris { return asSimpleText(); } + @Override + public int compareTo( final Sequence o ) { + if ( ( !ForesterUtil.isEmpty( getName() ) ) && ( !ForesterUtil.isEmpty( o.getName() ) ) ) { + return getName().compareTo( o.getName() ); + } + if ( ( !ForesterUtil.isEmpty( getSymbol() ) ) && ( !ForesterUtil.isEmpty( o.getSymbol() ) ) ) { + return getSymbol().compareTo( o.getSymbol() ); + } + if ( ( !ForesterUtil.isEmpty( getGeneName() ) ) && ( !ForesterUtil.isEmpty( o.getGeneName() ) ) ) { + return getGeneName().compareTo( o.getGeneName() ); + } + if ( ( getAccession() != null ) && ( o.getAccession() != null ) + && !ForesterUtil.isEmpty( getAccession().getValue() ) + && !ForesterUtil.isEmpty( o.getAccession().getValue() ) ) { + return getAccession().getValue().compareTo( o.getAccession().getValue() ); + } + if ( ( !ForesterUtil.isEmpty( getMolecularSequence() ) ) + && ( !ForesterUtil.isEmpty( o.getMolecularSequence() ) ) ) { + return getMolecularSequence().compareTo( o.getMolecularSequence() ); + } + return 0; + } + /** * Not a deep copy. - * + * */ @Override public PhylogenyData copy() { @@ -211,10 +244,18 @@ public class Sequence implements PhylogenyData, MultipleUris { return _annotations; } + public SortedSet getCrossReferences() { + return _xrefs; + } + public DomainArchitecture getDomainArchitecture() { return _da; } + public String getGeneName() { + return _gene_name; + } + public String getLocation() { return _location; } @@ -223,18 +264,10 @@ public class Sequence implements PhylogenyData, MultipleUris { return _mol_sequence; } - public boolean isMolecularSequenceAligned() { - return _mol_sequence_is_aligned; - } - public String getName() { return _name; } - public String getGeneName() { - return _gene_name; - } - public List getSequenceRelations() { if ( _seq_relations == null ) { _seq_relations = new ArrayList(); @@ -242,10 +275,6 @@ public class Sequence implements PhylogenyData, MultipleUris { return _seq_relations; } - private void setSequenceRelations( final List seq_relations ) { - _seq_relations = seq_relations; - } - public String getSourceId() { return _source_id; } @@ -259,13 +288,13 @@ public class Sequence implements PhylogenyData, MultipleUris { } @Override - public List getUris() { - return _uris; + public Uri getUri( final int index ) { + return getUris().get( index ); } @Override - public Uri getUri( final int index ) { - return getUris().get( index ); + public List getUris() { + return _uris; } @Override @@ -273,10 +302,13 @@ public class Sequence implements PhylogenyData, MultipleUris { if ( getAccession() != null ) { return getAccession().hashCode(); } - int result = getSymbol().hashCode(); - if ( getName().length() > 0 ) { + int result = getName().hashCode(); + if ( getSymbol().length() > 0 ) { result ^= getName().hashCode(); } + if ( getGeneName().length() > 0 ) { + result ^= getGeneName().hashCode(); + } if ( getMolecularSequence().length() > 0 ) { result ^= getMolecularSequence().hashCode(); } @@ -314,6 +346,16 @@ public class Sequence implements PhylogenyData, MultipleUris { setAnnotations( null ); } + public boolean isEmpty() { + return ( getAccession() == null ) && ForesterUtil.isEmpty( getName() ) && ForesterUtil.isEmpty( getSymbol() ) + && ForesterUtil.isEmpty( getGeneName() ) && ForesterUtil.isEmpty( getType() ) + && ForesterUtil.isEmpty( getLocation() ) && ForesterUtil.isEmpty( getSourceId() ) + && ForesterUtil.isEmpty( getMolecularSequence() ) && ( getDomainArchitecture() == null ) + && ForesterUtil.isEmpty( _annotations ) && ForesterUtil.isEmpty( _uris ) + && ForesterUtil.isEmpty( _seq_relations ) + && ( ( getCrossReferences() == null ) || getCrossReferences().isEmpty() ); + } + @Override public boolean isEqual( final PhylogenyData data ) { if ( this == data ) { @@ -327,18 +369,22 @@ public class Sequence implements PhylogenyData, MultipleUris { && s.getSymbol().equals( getSymbol() ) && s.getGeneName().equals( getGeneName() ); } - public void setAccession( final Accession accession ) { - _accession = accession; + public boolean isMolecularSequenceAligned() { + return _mol_sequence_is_aligned; } - private void setAnnotations( final SortedSet annotations ) { - _annotations = annotations; + public void setAccession( final Accession accession ) { + _accession = accession; } public void setDomainArchitecture( final DomainArchitecture ds ) { _da = ds; } + public void setGeneName( final String gene_name ) { + _gene_name = gene_name; + } + public void setLocation( final String description ) { _location = description; } @@ -355,10 +401,6 @@ public class Sequence implements PhylogenyData, MultipleUris { _name = name; } - public void setGeneName( final String gene_name ) { - _gene_name = gene_name; - } - public void setSourceId( final String source_id ) { _source_id = source_id; } @@ -440,9 +482,6 @@ public class Sequence implements PhylogenyData, MultipleUris { annotation.toPhyloXML( writer, level, my_ind ); } } - if ( getDomainArchitecture() != null ) { - getDomainArchitecture().toPhyloXML( writer, level, my_ind ); - } if ( ( getCrossReferences() != null ) && !getCrossReferences().isEmpty() ) { writer.write( ForesterUtil.LINE_SEPARATOR ); writer.write( my_ind ); @@ -454,6 +493,9 @@ public class Sequence implements PhylogenyData, MultipleUris { writer.write( my_ind ); PhylogenyDataUtil.appendClose( writer, PhyloXmlMapping.SEQUENCE_X_REFS ); } + if ( getDomainArchitecture() != null ) { + getDomainArchitecture().toPhyloXML( writer, level, my_ind ); + } writer.write( ForesterUtil.LINE_SEPARATOR ); writer.write( indentation ); PhylogenyDataUtil.appendClose( writer, PhyloXmlMapping.SEQUENCE ); @@ -463,4 +505,16 @@ public class Sequence implements PhylogenyData, MultipleUris { public String toString() { return asText().toString(); } + + private void setAnnotations( final SortedSet annotations ) { + _annotations = annotations; + } + + private void setCrossReferences( final TreeSet cross_references ) { + _xrefs = cross_references; + } + + private void setSequenceRelations( final List seq_relations ) { + _seq_relations = seq_relations; + } }