Merge branch 'alpha/JAL-3066_Jalview_212_slivka-integration' into alpha/JAL-3362_Jalv...
[jalview.git] / src / jalview / ws / slivkaws / SlivkaMsaServiceInstance.java
diff --git a/src/jalview/ws/slivkaws/SlivkaMsaServiceInstance.java b/src/jalview/ws/slivkaws/SlivkaMsaServiceInstance.java
new file mode 100644 (file)
index 0000000..a65e93e
--- /dev/null
@@ -0,0 +1,60 @@
+package jalview.ws.slivkaws;
+
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.io.DataSourceType;
+import jalview.io.FileFormat;
+import jalview.io.FormatAdapter;
+import jalview.ws.api.JobId;
+import jalview.ws.api.MultipleSequenceAlignmentI;
+import jalview.ws.params.ArgumentI;
+import jalview.ws.params.InvalidArgumentException;
+import jalview.ws.params.WsParamSetI;
+
+import java.io.IOError;
+import java.io.IOException;
+import java.rmi.ServerError;
+import java.util.List;
+
+import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
+import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
+import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
+
+public class SlivkaMsaServiceInstance extends SlivkaWSInstance implements MultipleSequenceAlignmentI
+{
+  SlivkaMsaServiceInstance(SlivkaClient client, SlivkaService service) {
+    super(client, service, "Sequence Alignment");
+    style = ServiceClient.MSAWSCLIENT;
+  }
+
+  @Override
+  public JobId align(List<SequenceI> toalign, WsParamSetI parameters, List<ArgumentI> list) throws Throwable
+  {
+    return super.submit(toalign, parameters, list);
+  }
+
+  @Override
+  public AlignmentI getAlignmentFor(JobId jobId) throws InvalidArgumentException, ServerError, IOError
+  {
+    List<RemoteFile> files;
+    try
+    {
+      files = client.getJobResults(jobId.getJobId());
+      for (RemoteFile f : files)
+      {
+        if (f.getMimeType().equals("application/clustal"))
+        {
+          return new FormatAdapter().readFile(f.getURL().toString(), DataSourceType.URL, FileFormat.Clustal);
+        }
+        else if (f.getMimeType().equals("application/fasta"))
+        {
+          return new FormatAdapter().readFile(f.getURL().toString(), DataSourceType.URL, FileFormat.Fasta);
+        }
+      }
+    } catch (IOException e)
+    {
+      throw new IOError(e);
+    }
+    return null;
+  }
+}