JAL-2797 added constructor including embedded/standalone boolean
[jalview.git] / forester / java / src / org / forester / sequence / BasicSequence.java
index dccc191..de3084e 100644 (file)
@@ -28,7 +28,7 @@ package org.forester.sequence;
 
 import org.forester.util.ForesterUtil;
 
-public class BasicSequence implements Sequence {
+public class BasicSequence implements MolecularSequence {
 
     private final char[] _mol_sequence;
     private String       _identifier;
@@ -36,23 +36,27 @@ public class BasicSequence implements Sequence {
 
     /**
      * Only use if you know what you are doing!
-     * 
+     *
      */
     public BasicSequence( final String identifier, final String mol_sequence, final TYPE type ) {
+        check( identifier, mol_sequence );
+        _mol_sequence = mol_sequence.toCharArray();
+        _identifier = identifier;
+        _type = type;
+    }
+
+    private static final void check( final String identifier, final String mol_sequence ) {
         if ( ForesterUtil.isEmpty( identifier ) ) {
             throw new IllegalArgumentException( "identifier of sequence cannot be empty" );
         }
         if ( ForesterUtil.isEmpty( mol_sequence ) ) {
             throw new IllegalArgumentException( "molecular sequence cannot be empty" );
         }
-        _mol_sequence = mol_sequence.toCharArray();
-        _identifier = identifier;
-        _type = type;
     }
 
     /**
      * Only use if you know what you are doing!
-     * 
+     *
      */
     public BasicSequence( final String identifier, final char[] mol_sequence, final TYPE type ) {
         if ( ForesterUtil.isEmpty( identifier ) ) {
@@ -114,7 +118,7 @@ public class BasicSequence implements Sequence {
         if ( obj.getClass() != getClass() ) {
             return false;
         }
-        final Sequence other = ( Sequence ) obj;
+        final MolecularSequence other = ( MolecularSequence ) obj;
         if ( getMolecularSequenceAsString().equals( other.getMolecularSequenceAsString() ) ) {
             return true;
         }
@@ -135,7 +139,7 @@ public class BasicSequence implements Sequence {
         return sb.toString();
     }
 
-    public static Sequence copySequence( final Sequence seq ) {
+    public static MolecularSequence copySequence( final MolecularSequence seq ) {
         final char[] s = new char[ seq.getMolecularSequence().length ];
         for( int i = 0; i < seq.getMolecularSequence().length; i++ ) {
             s[ i ] = seq.getMolecularSequence()[ i ];
@@ -143,19 +147,52 @@ public class BasicSequence implements Sequence {
         return new BasicSequence( new String( seq.getIdentifier() ), s, seq.getType() );
     }
 
-    public static Sequence createAaSequence( final String identifier, final String mol_sequence ) {
+    public static MolecularSequence createSequence( final String identifier, final String mol_sequence ) {
+        check( identifier, mol_sequence );
+        final TYPE type = ForesterUtil.guessMolecularSequenceType( mol_sequence );
+        final String re;
+        final char repl;
+        if ( type == TYPE.AA ) {
+            re = AA_REGEXP;
+            repl = UNSPECIFIED_AA;
+        }
+        else if ( type == TYPE.DNA ) {
+            re = DNA_REGEXP;
+            repl = UNSPECIFIED_NUC;
+        }
+        else if ( type == TYPE.RNA ) {
+            re = RNA_REGEXP;
+            repl = UNSPECIFIED_NUC;
+        }
+        else {
+            throw new IllegalArgumentException( "could not determine sequence type for: " + mol_sequence);
+        }
+        return new BasicSequence( identifier, mol_sequence.toUpperCase().replaceAll( "\\.", GAP_STR )
+                                  .replaceAll( re, Character.toString( repl ) ), type );
+    }
+    
+    public static MolecularSequence createGeneralSequence( final String identifier, final String mol_sequence ) {
+        check( identifier, mol_sequence );
+        return new BasicSequence( identifier, mol_sequence.toUpperCase().replaceAll( "\\.", GAP_STR 
+                                  ), TYPE.GENERAL );
+    }
+    
+    public static MolecularSequence createAaSequence( final String identifier, final String mol_sequence ) {
+        check( identifier, mol_sequence );
         return new BasicSequence( identifier, mol_sequence.toUpperCase().replaceAll( "\\.", GAP_STR )
-                .replaceAll( AA_REGEXP, Character.toString( UNSPECIFIED_AA ) ), TYPE.AA );
+                                  .replaceAll( AA_REGEXP, Character.toString( UNSPECIFIED_AA ) ), TYPE.AA );
     }
 
-    public static Sequence createDnaSequence( final String identifier, final String mol_sequence ) {
+    public static MolecularSequence createDnaSequence( final String identifier, final String mol_sequence ) {
+        check( identifier, mol_sequence );
         return new BasicSequence( identifier, mol_sequence.toUpperCase().replaceAll( "\\.", GAP_STR )
-                .replaceAll( DNA_REGEXP, Character.toString( UNSPECIFIED_NUC ) ), TYPE.DNA );
+                                  .replaceAll( DNA_REGEXP, Character.toString( UNSPECIFIED_NUC ) ), TYPE.DNA );
     }
 
-    public static Sequence createRnaSequence( final String identifier, final String mol_sequence ) {
+    public static MolecularSequence createRnaSequence( final String identifier, final String mol_sequence ) {
+        check( identifier, mol_sequence );
         return new BasicSequence( identifier, mol_sequence.toUpperCase().replaceAll( "\\.", GAP_STR )
-                .replaceAll( RNA_REGEXP, Character.toString( UNSPECIFIED_NUC ) ), TYPE.RNA );
+                                  .replaceAll( RNA_REGEXP, Character.toString( UNSPECIFIED_NUC ) ), TYPE.RNA );
     }
 
     @Override