JAL-2847 needed methods made public
[jalview.git] / forester / java / src / org / forester / msa / Mafft.java
index b56ca1e..5a96bc3 100644 (file)
 // 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.msa;
 
+import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.forester.io.parsers.FastaParser;
-import org.forester.util.ForesterUtil;
+import org.forester.io.writers.SequenceWriter;
+import org.forester.io.writers.SequenceWriter.SEQ_FORMAT;
+import org.forester.sequence.MolecularSequence;
 import org.forester.util.SystemCommandExecutor;
 
-public final class Mafft implements MsaInferrer {
+public final class Mafft extends MsaInferrer {
 
     private final static String DEFAULT_PARAMETERS = "--maxiterate 1000 --localpair";
     private String              _error;
     private int                 _exit_code;
     private final String        _path_to_prg;
 
-    public static MsaInferrer createInstance() {
-        return createInstance( getPathToCmd() );
-    }
-
-    public static MsaInferrer createInstance( final String path_to_prg ) {
+    public static MsaInferrer createInstance( final String path_to_prg ) throws IOException {
         return new Mafft( path_to_prg );
     }
 
-    private static String getPathToCmd() {
-        //TODO this needs to come from config file!!
-        //FIXME ..
-        //should not be in this class!
-        String path = "";
-        final String os = ForesterUtil.OS_NAME.toLowerCase();
-        if ( ( os.indexOf( "mac" ) >= 0 ) && ( os.indexOf( "os" ) > 0 ) ) {
-            path = "/usr/local/bin/mafft";
-        }
-        else if ( os.indexOf( "win" ) >= 0 ) {
-            path = "C:\\Program Files\\mafft-win\\mafft.bat";
-        }
-        else {
-            path = "/home/czmasek/bin/mafft";
-        }
-        return path;
-    }
-
-    public static boolean isInstalled() {
-        return SystemCommandExecutor.isExecuteableFile( new File( getPathToCmd() ) );
-    }
-
-    private Mafft( final String path_to_prg ) {
-        if ( !SystemCommandExecutor.isExecuteableFile( new File( path_to_prg ) ) ) {
-            throw new IllegalArgumentException( "cannot execute MAFFT via [" + path_to_prg + "]" );
+    private Mafft( final String path_to_prg ) throws IOException {
+        if ( !isInstalled( path_to_prg ) ) {
+            throw new IOException( "cannot execute MAFFT with \"" + path_to_prg + "\"" );
         }
         _path_to_prg = new String( path_to_prg );
         init();
@@ -84,11 +62,6 @@ public final class Mafft implements MsaInferrer {
     }
 
     @Override
-    public Object clone() {
-        throw new NoSuchMethodError();
-    }
-
-    @Override
     public String getErrorDescription() {
         return _error;
     }
@@ -99,6 +72,19 @@ public final class Mafft implements MsaInferrer {
     }
 
     @Override
+    public Msa infer( final List<MolecularSequence> seqs, final List<String> opts ) throws IOException,
+    InterruptedException {
+        final File file = File.createTempFile( "__mafft_input_", ".fasta" );
+        file.deleteOnExit();
+        final BufferedWriter writer = new BufferedWriter( new FileWriter( file ) );
+        SequenceWriter.writeSeqs( seqs, writer, SEQ_FORMAT.FASTA, 100 );
+        writer.close();
+        final Msa msa = infer( file, opts );
+        file.delete();
+        return msa;
+    }
+
+    @Override
     public Msa infer( final File path_to_input_seqs, final List<String> opts ) throws IOException, InterruptedException {
         init();
         final List<String> my_opts = new ArrayList<String>();
@@ -113,7 +99,7 @@ public final class Mafft implements MsaInferrer {
         _error = stderr.toString();
         if ( _exit_code != 0 ) {
             throw new IOException( "MAFFT program failed, exit code: " + _exit_code + "\nCommand:\n" + my_opts
-                    + "\nError:\n" + stderr );
+                                   + "\nError:\n" + stderr );
         }
         final StringBuilder stdout = command_executor.getStandardOutputFromCommand();
         if ( ( stdout == null ) || ( stdout.length() < 2 ) ) {