// Copyright (C) 2008-2009 Christian M. Zmasek
// Copyright (C) 2008-2009 Burnham Institute for Medical Research
// All rights reserved
-//
+//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
-//
+//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
//
// Contact: phylosoft @ gmail . com
-// WWW: www.phylosoft.org/forester
+// WWW: https://sites.google.com/site/cmzmasek/home/software/forester
package org.forester.phylogeny.data;
private DomainArchitecture _da;
private List<Uri> _uris;
private List<SequenceRelation> _seq_relations;
+ private SortedSet<Accession> _xrefs;
public Sequence() {
init();
&& ForesterUtil.isEmpty( getType() ) && ForesterUtil.isEmpty( getLocation() )
&& ForesterUtil.isEmpty( getSourceId() ) && ForesterUtil.isEmpty( getMolecularSequence() )
&& ( getDomainArchitecture() == null ) && ForesterUtil.isEmpty( _annotations )
- && ForesterUtil.isEmpty( _uris ) && ForesterUtil.isEmpty( _seq_relations );
+ && ForesterUtil.isEmpty( _uris ) && ForesterUtil.isEmpty( _seq_relations )
+ && ( getCrossReferences() == null || getCrossReferences().isEmpty() );
}
public void addAnnotation( final Annotation annotation ) {
getAnnotations().add( annotation );
}
+
+ public void addCrossReference( Accession cross_reference ) {
+ if ( getCrossReferences() == null ) {
+ setCrossReferences( new TreeSet<Accession>() );
+ }
+ getCrossReferences().add( cross_reference );
+ }
+
+ public SortedSet<Accession> getCrossReferences() {
+ return _xrefs;
+ }
+
+ private void setCrossReferences( TreeSet<Accession> cross_references ) {
+ _xrefs = cross_references;
+ }
+ @Override
public void addUri( final Uri uri ) {
if ( getUris() == null ) {
setUris( new ArrayList<Uri>() );
_seq_relations.add( sr );
}
+ @Override
public StringBuffer asSimpleText() {
final StringBuffer sb = new StringBuffer();
if ( getAccession() != null ) {
return sb;
}
+ @Override
public StringBuffer asText() {
return asSimpleText();
}
* Not a deep copy.
*
*/
+ @Override
public PhylogenyData copy() {
final Sequence seq = new Sequence();
seq.setAnnotations( getAnnotations() );
seq.setName( getName() );
- seq.setSymbol( getSymbol() );
+ try {
+ seq.setSymbol( getSymbol() );
+ }
+ catch ( final PhyloXmlDataFormatException e ) {
+ e.printStackTrace();
+ }
seq.setMolecularSequence( getMolecularSequence() );
seq.setMolecularSequenceAligned( isMolecularSequenceAligned() );
seq.setLocation( getLocation() );
else {
seq.setAccession( null );
}
- seq.setType( getType() );
+ try {
+ seq.setType( getType() );
+ }
+ catch ( final PhyloXmlDataFormatException e ) {
+ e.printStackTrace();
+ }
if ( getUris() != null ) {
seq.setUris( new ArrayList<Uri>() );
for( final Uri uri : getUris() ) {
else {
seq.setDomainArchitecture( null );
}
+ if ( getCrossReferences() != null ) {
+ seq.setCrossReferences( new TreeSet<Accession>() );
+ for( final Accession x : getCrossReferences() ) {
+ if ( x != null ) {
+ seq.getCrossReferences().add( x);
+ }
+ }
+ }
return seq;
}
return _type;
}
+ @Override
public List<Uri> getUris() {
return _uris;
}
+ @Override
public Uri getUri( final int index ) {
return getUris().get( index );
}
setMolecularSequenceAligned( false );
setLocation( "" );
setAccession( null );
- setSymbol( "" );
- setType( "" );
+ try {
+ setSymbol( "" );
+ }
+ catch ( final PhyloXmlDataFormatException e ) {
+ e.printStackTrace();
+ }
+ try {
+ setType( "" );
+ }
+ catch ( final PhyloXmlDataFormatException e ) {
+ e.printStackTrace();
+ }
setDomainArchitecture( null );
setUris( null );
setSequenceRelations( null );
setSourceId( null );
+ setCrossReferences(null);
}
+ @Override
public boolean isEqual( final PhylogenyData data ) {
if ( this == data ) {
return true;
_source_id = source_id;
}
- public void setSymbol( final String symbol ) {
+ public void setSymbol( final String symbol ) throws PhyloXmlDataFormatException {
if ( !ForesterUtil.isEmpty( symbol ) && !PhyloXmlUtil.SEQUENCE_SYMBOL_PATTERN.matcher( symbol ).matches() ) {
throw new PhyloXmlDataFormatException( "illegal sequence symbol: [" + symbol + "]" );
}
_symbol = symbol;
}
- public void setType( final String type ) {
+ public void setType( final String type ) throws PhyloXmlDataFormatException {
if ( !ForesterUtil.isEmpty( type ) && !PhyloXmlUtil.SEQUENCE_TYPES.contains( type ) ) {
throw new PhyloXmlDataFormatException( "illegal sequence type: [" + type + "]" );
}
_type = type;
}
+ @Override
public void setUris( final List<Uri> uris ) {
_uris = uris;
}
+ @Override
public StringBuffer toNHX() {
final StringBuffer sb = new StringBuffer();
if ( getName().length() > 0 ) {
return sb;
}
+ @Override
public void toPhyloXML( final Writer writer, final int level, final String indentation ) throws IOException {
if ( isEmpty() ) {
return;
String.valueOf( isMolecularSequenceAligned() ),
indentation );
}
- if ( getUris() != null ) {
+ if ( getUris() != null && !getUris().isEmpty() ) {
for( final Uri uri : getUris() ) {
if ( uri != null ) {
uri.toPhyloXML( writer, level, indentation );
}
}
}
- if ( _annotations != null ) {
+ if ( getAnnotations() != null && !getAnnotations().isEmpty() ) {
for( final PhylogenyData annotation : getAnnotations() ) {
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 );
+ PhylogenyDataUtil.appendOpen( writer, PhyloXmlMapping.SEQUENCE_X_REFS );
+ for( final PhylogenyData x : getCrossReferences() ) {
+ x.toPhyloXML( writer, level, my_ind );
+ }
+ writer.write( ForesterUtil.LINE_SEPARATOR );
+ writer.write( my_ind );
+ PhylogenyDataUtil.appendClose( writer, PhyloXmlMapping.SEQUENCE_X_REFS );
+ }
writer.write( ForesterUtil.LINE_SEPARATOR );
writer.write( indentation );
PhylogenyDataUtil.appendClose( writer, PhyloXmlMapping.SEQUENCE );