Alifold results are now parsed and stored in a ScoreManager object
[jabaws.git] / runner / compbio / runner / structure / RNAalifold.java
index 43a0975..0e9e20f 100644 (file)
@@ -1,51 +1,51 @@
 package compbio.runner.structure;
 
-import java.util.Scanner; //temp
-import java.io.File; //temp
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
 
+
+
+
+
 import org.apache.log4j.Logger;
 
-import compbio.data.sequence.Alignment;
+import compbio.data.sequence.ScoreManager;
+import compbio.data.sequence.RNAStruct;
 import compbio.data.sequence.UnknownFileFormatException;
+import compbio.engine.client.PipedExecutable;
 import compbio.engine.client.SkeletalExecutable;
 import compbio.metadata.ResultNotAvailableException;
 import compbio.runner.Util;
 
-public class RNAalifold extends SkeletalExecutable<RNAalifold> {
+
+import compbio.engine.client.CommandBuilder;
+
+public class RNAalifold extends SkeletalExecutable<RNAalifold> 
+               implements PipedExecutable<RNAalifold> {
        
-       @SuppressWarnings("unchecked")
-       @Override
-       //temp
-       public String getResults(String resultFile)
-                       throws ResultNotAvailableException {
-               Scanner s;
-               try {
-                       System.out.println("testfrom RNAalifold.getResults");
-                       s = new Scanner(new File(resultFile));
-                       System.out.println(s.nextLine());
-                       return "null";
-               } catch (FileNotFoundException e) {
-                       System.out.println("file not found");
-                       throw new ResultNotAvailableException(e);
-               } 
-       }
+       
+       private static Logger log = Logger.getLogger(RNAalifold.class);
 
+       // May not be necessary as defult is "<space>" but still dont know
+       // How to deal with different key value separators for different params
+       public static final String KEY_VALUE_SEPARATOR = " ";
+       
+       public RNAalifold() {
+               super(KEY_VALUE_SEPARATOR);
+       }
        
        @Override
        public RNAalifold setOutput(String outFile) {
-               System.out.println("Set ouput file: " + outFile.toString());
                super.setOutput(outFile);
                return this;
        }
        
        @Override
        public RNAalifold setInput(String inFile) {
-               System.out.println("Set input file: " + inFile.toString());
+               cbuilder.setLast(inFile);
                super.setInput(inFile);
                return this;
        }
@@ -56,5 +56,63 @@ public class RNAalifold extends SkeletalExecutable<RNAalifold> {
                return (Class<RNAalifold>) this.getClass();
        }
        
+       @SuppressWarnings("unchecked")
+       @Override
+       // PlaceHolder method
+       public ScoreManager getResults(String workDirectory)
+                       throws ResultNotAvailableException {
+               try {
+                       return Util.readRNAStruct(workDirectory, getOutput());
+                       
+               } catch (FileNotFoundException e) {
+                       log.error(e.getMessage(), e.getCause());
+                       throw new ResultNotAvailableException(e);
+               } catch (IOException e) {
+                       log.error(e.getMessage(), e.getCause());
+                       throw new ResultNotAvailableException(e);
+               }
+       }
+
+
+       // the new currently used methods for reading are found in 
+       // - compbio.data.sequence.SequenceUtil and 
+       // - compbio.runner.Util
+       
+       // Simple and generic methods for reading a whole file
+//     private static String readRNAStruct(String workDirectory,
+//                     String structFile) throws IOException, FileNotFoundException {
+//             assert !compbio.util.Util.isEmpty(workDirectory);
+//             assert !compbio.util.Util.isEmpty(structFile);
+//             File sfile = new File(compbio.engine.client.Util.getFullPath(
+//                             workDirectory, structFile));
+//             log.trace("RNAALIFOLD OUTPUT FILE PATH: " + sfile.getAbsolutePath());
+//             if(!(sfile.exists() && sfile.length() > 0)) {
+//                     throw new FileNotFoundException("Result for the jobId "
+//                                     + workDirectory + "with file name " + structFile
+//                                     + " is not found!");
+//             }
+//             return readFile(sfile);
+//     }
+//     
+//     private static BufferedReader input;
+//     public static String readFile(File inputFile) throws 
+//                     FileNotFoundException, IOException {
+//             
+//             input   = new BufferedReader(new FileReader(inputFile));
+//             
+//             String file = new String();
+//             String line = new String();
+//             
+//             while (true) {
+//                     line = input.readLine();
+//                     
+//                     if (line != null) {
+//                             file = file + line + "\r\n";
+//                     } else break;
+//             }
+//             // Close file
+//             input.close();
+//             return file;
+//     }
        
 }