Temporary fix problem with wrong Jpred version
[proteocache.git] / datadb / compbio / cassandra / JpredParserHTTP.java
index ac9ed4f..c6db457 100644 (file)
@@ -9,10 +9,14 @@ import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import compbio.cassandra.JpredParser;
 import compbio.data.sequence.FastaReader;
@@ -33,6 +37,7 @@ public class JpredParserHTTP implements JpredParser {
        private int countNoData;
        private static boolean archiving = false;
        private static final PropertyHelper ph = ProteoCachePropertyHelperManager.getPropertyHelper();
+       static SimpleDateFormat timeformatter = new SimpleDateFormat("yyyy/MM/dd:H:m:s");
 
        public JpredParserHTTP() {
                dirprefix = "http://www.compbio.dundee.ac.uk/www-jpred/results";
@@ -94,12 +99,29 @@ public class JpredParserHTTP implements JpredParser {
                return protein;
        }
 
-       private String parseLogFile(final InputStream stream) throws IOException {
+       private String parseSeqFile(final InputStream stream, String jobid) throws FileNotFoundException {
+               final FastaReader fr = new FastaReader(stream);
+               String protein = "";
+               final FastaSequence fs = fr.next();
+               protein = fs.getSequence().replaceAll("\n", "");
+               if (fr.hasNext()) {
+                       // this is an aligment job...
+                       return "alignment";
+               }
+               return protein;
+       }
+
+       private String parseLogFile(final InputStream stream, JpredJob job) throws IOException {
                String out = "";
                BufferedReader buffer = new BufferedReader(new InputStreamReader(stream));
                String line;
+               if (null != (out = buffer.readLine()) && (out.contains("version"))) {
+                       Matcher matcher = Pattern.compile("((\\d|\\.)+)").matcher(out);
+                       if (matcher.find())
+                               job.setProgramVersion(matcher.group(0));
+               }
                while (null != (line = buffer.readLine())) {
-                       out += line;
+                       out += line;            
                }
                return out;
        }
@@ -112,10 +134,20 @@ public class JpredParserHTTP implements JpredParser {
                boolean LogfileExists = false;
                JpredJob job = new JpredJob(jobinfo[jobinfo.length - 1], jobinfo[0], jobinfo[1]);
                job.setIP(jobinfo[2]);
+               job.setProgramName("Jpred");
+               job.setProgramVersion("3.0.1");
                Date currDate = new Date();
                String maindir = dirprefix + "/" + job.getJobID() + "/";
 
                try {
+                       Date finishTime = timeformatter.parse(jobinfo[1]);
+                       long delay = currDate.getTime() / 1000 - finishTime.getTime() / 1000;
+                       if (delay < 120) return 0;
+               } catch (ParseException e) {
+                       e.printStackTrace();
+               }
+
+               try {
                        URL dirurl = new URL(maindir);
                        HttpURLConnection httpConnection_dirurl = (HttpURLConnection) dirurl.openConnection();
                        if (httpConnection_dirurl.getResponseCode() < 199 || 300 <= httpConnection_dirurl.getResponseCode()) {
@@ -128,7 +160,7 @@ public class JpredParserHTTP implements JpredParser {
                        if (199 < httpConnection_conciseurl.getResponseCode() && httpConnection_conciseurl.getResponseCode() < 300) {
                                ConcisefileExists = true;
                                running = false;
-                               try {
+                               try {                           
                                        job.setProtein(parsePredictions(conciseurl.openStream(), job.getJobID()));
                                } catch (IOException e) {
                                        e.printStackTrace();
@@ -139,9 +171,10 @@ public class JpredParserHTTP implements JpredParser {
                        }
                        if (199 < httpConnection_logurl.getResponseCode() && httpConnection_logurl.getResponseCode() < 300) {
                                LogfileExists = true;
-                               job.setLog(parseLogFile(logurl.openStream()));
+                               job.setLog(parseLogFile(logurl.openStream(), job));
                        } else {
                                // The job has not been started at all...
+                               System.out.println ("WARNING! Job " + job.getJobID() + " has status FAIL/STOPPED");
                                job.setExecutionStatus("FAIL");
                                job.setFinalStatus("STOPPED");
                                running = false;
@@ -170,9 +203,22 @@ public class JpredParserHTTP implements JpredParser {
                }
 
                if (!running) {
+                       // logging the job
                        job.setAlignment(alignment);
                        job.setPredictions(predictions);
+                       if (job.getExecutionStatus().equals("FAIL")) {
+                               URL sequrl = new URL(maindir + job.getJobID() + ".seq");
+                               HttpURLConnection httpConnection_sequrl = (HttpURLConnection) sequrl.openConnection();
+                               if (199 < httpConnection_sequrl.getResponseCode() && httpConnection_sequrl.getResponseCode() < 300) {
+                                       try {
+                                               job.setProtein(parseSeqFile(sequrl.openStream(), job.getJobID()));
+                                       } catch (IOException e) {
+                                               e.printStackTrace();
+                                       }
+                               }
+                       }
                        cw.FormQueryTables(job);
+
                        // archiving the job
                        if (archiving) {
                                ArchivedJob ajob = new ArchivedJob(job.getJobID());