phylotastic hackathon at NESCENT 120608
[jalview.git] / forester / java / src / org / forester / msa / Mafft.java
index b78cb32..6fc1675 100644 (file)
@@ -41,12 +41,18 @@ public final class Mafft implements MsaInferrer {
     private int                 _exit_code;
     private final String        _path_to_prg;
 
-    public static MsaInferrer createInstance( final String path_to_prg ) {
+    public static MsaInferrer createInstance() throws IOException {
+        return createInstance( getPathToCmd() );
+    }
+
+    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 env variable, etc.
+        //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 ) ) {
@@ -56,7 +62,7 @@ public final class Mafft implements MsaInferrer {
             path = "C:\\Program Files\\mafft-win\\mafft.bat";
         }
         else {
-            path = "/home/czmasek/SOFTWARE/MSA/MAFFT/mafft-6.832-without-extensions/scripts/mafft";
+            path = "/home/czmasek/bin/mafft";
         }
         return path;
     }
@@ -65,13 +71,9 @@ public final class Mafft implements MsaInferrer {
         return SystemCommandExecutor.isExecuteableFile( new File( getPathToCmd() ) );
     }
 
-    public static MsaInferrer createInstance() {
-        return createInstance( getPathToCmd() );
-    }
-
-    private Mafft( final String path_to_prg ) {
+    private Mafft( final String path_to_prg ) throws IOException {
         if ( !SystemCommandExecutor.isExecuteableFile( new File( path_to_prg ) ) ) {
-            throw new IllegalArgumentException( "cannot execute MAFFT via [" + path_to_prg + "]" );
+            throw new IOException( "cannot execute MAFFT with \"" + path_to_prg + "\"" );
         }
         _path_to_prg = new String( path_to_prg );
         init();
@@ -105,17 +107,19 @@ public final class Mafft implements MsaInferrer {
             my_opts.add( opts.get( i ) );
         }
         my_opts.add( path_to_input_seqs.getAbsolutePath() );
-        final SystemCommandExecutor commandExecutor = new SystemCommandExecutor( my_opts );
-        final int _exit_code = commandExecutor.executeCommand();
+        final SystemCommandExecutor command_executor = new SystemCommandExecutor( my_opts );
+        final int _exit_code = command_executor.executeCommand();
+        final StringBuilder stderr = command_executor.getStandardErrorFromCommand();
+        _error = stderr.toString();
         if ( _exit_code != 0 ) {
-            throw new IOException( "MAFFT failed, exit code: " + _exit_code );
+            throw new IOException( "MAFFT program failed, exit code: " + _exit_code + "\nCommand:\n" + my_opts
+                    + "\nError:\n" + stderr );
+        }
+        final StringBuilder stdout = command_executor.getStandardOutputFromCommand();
+        if ( ( stdout == null ) || ( stdout.length() < 2 ) ) {
+            throw new IOException( "MAFFT program did not produce any output\nCommand:\n" + my_opts + "\nError:\n"
+                    + stderr );
         }
-        final StringBuilder stdout = commandExecutor.getStandardOutputFromCommand();
-        final StringBuilder stderr = commandExecutor.getStandardErrorFromCommand();
-        System.out.println( stdout );
-        System.out.println();
-        System.out.println( stderr );
-        _error = stderr.toString();
         final Msa msa = FastaParser.parseMsa( stdout.toString() );
         return msa;
     }