Add new operation to the ProteoCache WS
[proteocache.git] / server / compbio / ws / jpred / JpredWS.java
index 16e100f..9978cc4 100644 (file)
@@ -1,27 +1,85 @@
 package compbio.ws.jpred;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.jws.WebService;
 
 import org.apache.log4j.Logger;
 
+import compbio.beans.ProteinBean;
 import compbio.cassandra.CassandraNativeConnector;
 import compbio.cassandra.readers.SequenceReader;
+import compbio.engine.archive.ArchivedJob;
 
 @WebService(endpointInterface = "compbio.ws.jpred.Jpred", targetNamespace = "http://server.proteocache.ws", serviceName = "ProteoCacheWS", portName = "ProteoCacheWSPort")
 public class JpredWS implements Jpred {
        private static Logger log = Logger.getLogger(CassandraNativeConnector.class);
+       String jobid;
 
-       @Override
-       public String findSequence(String sequence, String program, String version) {
+       private List<String> findJobs(String sequence, String program, String version) {
                CassandraNativeConnector dbconnector = new CassandraNativeConnector();
                SequenceReader reader = new SequenceReader();
                reader.setSession(dbconnector.getSession());
-               log.debug("ProteoCacheWS is connected:\n search for sequence: " + sequence + "\ncalculated wih  " + program + " (version; "
+               log.debug("ProteoCacheWS is connected:\n search for sequence: " + sequence + "\ncalculated with  " + program + " (version: "
                                + version + ")");
-               if (null != reader.readProteins(sequence, "whole")) {
-                       return "The sequence " + sequence + " found. Calculated with " + program + "(" + version + ")";
+               List<String> jobs = new ArrayList<String>();
+               List<ProteinBean> result = reader.readProteins(sequence, "whole");
+               if (null != result) {
+                       for (ProteinBean protein : result) {
+                               List<String> thejobs = protein.getJobid();
+                               jobid = thejobs.get(0);
+                               for (String job : thejobs) {
+                                       jobs.add(job);
+                               }
+                       }
+               }
+               return jobs;
+       }
+
+       @Override
+       public String findSequence(String sequence, String program, String version) {
+               List<String> jobs = findJobs(sequence, program, version);
+               if (null != jobs) {
+                       return jobs.size() + " jobs found";
+               }
+               return "no jobs found";
+       }
+
+       @Override
+       public String findJobForSequence(String sequence, String program, String version) {
+               List<String> jobs = findJobs(sequence, program, version);
+               if (null != jobs) {
+                       for (String job : jobs) {
+                               String link = null;
+                               ArchivedJob aj = new ArchivedJob(job);
+                               try {
+                                       link = aj.prepareJobArchiveToWeb();
+                               } catch (IOException e) {
+                                       log.error("JpredWS.findSequence: IO exception with job archive file");
+                                       log.error(e.getLocalizedMessage(), e.getCause());
+                               }
+                               if (null != link) {
+                                       return job;
+                               }
+                       }
+                       return "";
+               }
+               return "";
+       }
+
+       @Override
+       public String getArchive(String jobid) {
+               String link = "undefined";
+               ArchivedJob aj = new ArchivedJob(jobid);
+               try {
+                       link = aj.prepareJobArchiveToWeb();
+               } catch (IOException e) {
+                       log.error("JpredWS.findSequence: IO exception with job archive file");
+                       log.error(e.getLocalizedMessage(), e.getCause());
                }
-               return "The sequence " + sequence + " not found";
+               return link;
        }
 
 }