1 package jalview.ws2.client.jpred4;
3 import java.io.ByteArrayOutputStream;
4 import java.io.IOException;
7 import jalview.datamodel.SequenceI;
8 import jalview.io.AlignFile;
9 import jalview.io.DataSourceType;
10 import jalview.io.FastaFile;
11 import jalview.io.FileFormat;
12 import jalview.io.FormatAdapter;
13 import jalview.io.JPredFile;
14 import jalview.ws.params.ArgumentI;
15 import jalview.ws2.api.Credentials;
16 import jalview.ws2.api.JobStatus;
17 import jalview.ws2.api.WebServiceJobHandle;
18 import jalview.ws2.client.api.SecStructPredWebServiceClientI;
19 import uk.ac.dundee.compbio.jpred.JPredClient;
20 import uk.ac.dundee.compbio.jpred.JPredRequest;
21 import uk.ac.dundee.compbio.jpred.ResultTypes;
23 public class JPred4WSClient implements SecStructPredWebServiceClientI
25 final JPredClient client;
27 private final JPredRequest.Mode mode;
29 private final JPredRequest.Format format;
31 JPred4WSClient(JPredClient client, boolean msaMode)
33 this.mode = msaMode ? JPredRequest.Mode.MSA : JPredRequest.Mode.SINGLE;
34 this.format = msaMode ? JPredRequest.Format.FASTA : JPredRequest.Format.SEQ;
39 public String getUrl()
41 return client.getURL().toString();
45 public String getClientName()
51 public WebServiceJobHandle submit(List<SequenceI> sequences,
52 List<ArgumentI> args, Credentials credentials) throws IOException
54 var input = mode == JPredRequest.Mode.MSA
57 .print(sequences.toArray(new SequenceI[sequences.size()]), false)
58 : sequences.get(0).getSequenceAsString();
60 JPredRequest request = JPredRequest
66 var jobId = client.submit(request);
67 return new WebServiceJobHandle(getClientName(), "jpred4", getUrl(), jobId);
71 public JobStatus getStatus(WebServiceJobHandle job) throws IOException
73 var status = client.getStatus(job.getJobId());
77 return JobStatus.QUEUED;
79 return JobStatus.RUNNING;
81 return JobStatus.COMPLETED;
83 return JobStatus.SERVER_ERROR;
85 return JobStatus.INVALID;
87 return JobStatus.SERVER_ERROR;
89 return JobStatus.UNKNOWN;
94 public String getLog(WebServiceJobHandle job) throws IOException
96 var stream = client.getResultStream(job.getJobId(), ResultTypes.LOG);
97 // FIXME: potential OOM
98 return new String(stream.readAllBytes());
102 public String getErrorLog(WebServiceJobHandle job) throws IOException
108 public void cancel(WebServiceJobHandle job)
109 throws IOException, UnsupportedOperationException
115 public AlignFile getAlignmentFile(WebServiceJobHandle job) throws IOException
117 var stream = client.getResultStream(job.getJobId(), ResultTypes.PSIBLAST_ALIGN);
118 var buffer = new byte[2048];
119 var file = new ByteArrayOutputStream();
121 while ((len= stream.read(buffer)) >= 0)
122 file.write(buffer, 0, len);
123 return new FastaFile(file.toString("UTF-8"), DataSourceType.PASTE);
127 public JPredFile getPredictionFile(WebServiceJobHandle job) throws IOException
129 var stream = client.getResultStream(job.getJobId(), ResultTypes.CONCISE);
130 var buffer = new byte[2048];
131 var file = new ByteArrayOutputStream();
133 while ((len= stream.read(buffer)) >= 0)
134 file.write(buffer, 0, len);
135 return new JPredFile(file.toString("UTF-8"), DataSourceType.PASTE);