JAL-3954 Add query sequence aligned to consensus to search result
[jalview.git] / src / jalview / ws2 / client / ebi / PhmmerWSClient.java
index b796618..9c5f14f 100644 (file)
@@ -1,11 +1,22 @@
 package jalview.ws2.client.ebi;
 
+import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.StringReader;
+import java.net.URI;
 import java.util.List;
 
+import jalview.bin.Console;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
+import jalview.io.DataSourceType;
 import jalview.io.FileFormat;
+import jalview.io.FileParse;
+import jalview.io.FormatAdapter;
+import jalview.io.StockholmFile;
 import jalview.ws.params.ArgumentI;
 import jalview.ws.params.simple.BooleanOption;
 import jalview.ws.params.simple.DoubleParameter;
@@ -13,13 +24,14 @@ import jalview.ws.params.simple.IntegerParameter;
 import jalview.ws2.api.Credentials;
 import jalview.ws2.api.JobStatus;
 import jalview.ws2.api.WebServiceJobHandle;
+import jalview.ws2.client.api.AlignmentWebServiceClientI;
 import jalview.ws2.client.api.WebServiceClientI;
 import uk.ac.dundee.compbio.hmmerclient.PhmmerClient;
 import uk.ac.dundee.compbio.hmmerclient.PhmmerRequest;
 import uk.ac.dundee.compbio.hmmerclient.PhmmerRequest.SequenceDatabase;
 import uk.ac.dundee.compbio.hmmerclient.PhmmerRequest.SubstitutionMatrix;
 
-public class PhmmerWSClient implements WebServiceClientI
+public class PhmmerWSClient implements AlignmentWebServiceClientI
 {
 
   final PhmmerClient client;
@@ -53,6 +65,7 @@ public class PhmmerWSClient implements WebServiceClientI
     var email = credentials.getEmail() != null ? credentials.getEmail() :
       "nouser@jalview.org";
     var jobId = client.submit(request.build(), email);
+    Console.debug("Phmmer client submitted new job with id " + jobId);
     return new WebServiceJobHandle(
             getClientName(), "phmmer", getUrl(), jobId);
   }
@@ -226,7 +239,25 @@ public class PhmmerWSClient implements WebServiceClientI
           throws IOException, UnsupportedOperationException
   {
     throw new UnsupportedOperationException(
-            "ebi job dispather does not support job cancellation");
+            "ebi job dispatcher does not support job cancellation");
   }
 
+  /**
+   * FIXME: Temporary hack
+   */
+  @Override
+  public AlignmentI getAlignment(WebServiceJobHandle job) throws IOException
+  {
+    URI url = client.getResultURL(job.getJobId(), "sto");
+    try(InputStream stream = client.getResultStream(job.getJobId(), "sto"))
+    {
+      StockholmFile file = new StockholmFile(new FileParse(
+              new BufferedReader(new InputStreamReader(stream)),
+              url.toString(), DataSourceType.URL));
+      var aln = new Alignment(file.getSeqsAsArray());
+      for (var annotation : file.getAnnotations())
+        aln.addAnnotation(annotation);
+      return aln;
+    }
+  }
 }