1 package jalview.ws.slivkaws;
3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.SequenceI;
5 import jalview.gui.WebserviceInfo;
6 import jalview.io.DataSourceType;
7 import jalview.io.FileFormat;
8 import jalview.io.FormatAdapter;
9 import jalview.ws.api.JalviewServiceEndpointProviderI;
10 import jalview.ws.api.JobId;
11 import jalview.ws.api.MultipleSequenceAlignmentI;
12 import jalview.ws.api.ServiceWithParameters;
13 import jalview.ws.gui.WsJob;
14 import jalview.ws.params.ArgumentI;
15 import jalview.ws.params.ParamManager;
16 import jalview.ws.params.WsParamSetI;
18 import java.io.ByteArrayInputStream;
19 import java.io.IOException;
20 import java.io.InputStream;
21 import java.util.EnumMap;
22 import java.util.List;
24 import uk.ac.dundee.compbio.slivkaclient.Form;
25 import uk.ac.dundee.compbio.slivkaclient.FormValidationException;
26 import uk.ac.dundee.compbio.slivkaclient.JobState;
27 import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
28 import uk.ac.dundee.compbio.slivkaclient.Service;
29 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
31 public class ClustaloWS extends ServiceWithParameters
32 implements MultipleSequenceAlignmentI, JalviewServiceEndpointProviderI
34 private SlivkaClient client;
35 private Service service;
37 private EnumMap<JobState, WsJob.JobState> stateMap = new EnumMap<>(JobState.class);
39 stateMap.put(JobState.PENDING, WsJob.JobState.QUEUED);
40 stateMap.put(JobState.QUEUED, WsJob.JobState.QUEUED);
41 stateMap.put(JobState.RUNNING, WsJob.JobState.RUNNING);
42 stateMap.put(JobState.COMPLETED, WsJob.JobState.FINISHED);
43 stateMap.put(JobState.FAILED, WsJob.JobState.FAILED);
44 stateMap.put(JobState.ERROR, WsJob.JobState.SERVERERROR);
45 stateMap.put(JobState.UNKNOWN, WsJob.JobState.UNKNOWN);
49 ClustaloWS(SlivkaClient client)
51 super("ClustalO", "Alignment", "ClustalO", "foo", "http://foo.foo");
56 service = client.getService("clustalo");
57 } catch (IOException e)
59 throw new RuntimeException(e);
64 public void updateStatus(WsJob job)
68 job.setState(stateMap.get(client.getJobState(job.getJobId())));
69 } catch (IOException e)
71 throw new RuntimeException(e);
76 public boolean updateJobProgress(WsJob job)
82 public boolean handleSubmitError(Throwable _lex, WsJob j, WebserviceInfo wsInfo)
88 public boolean handleCollectionException(Exception e, WsJob msjob, WebserviceInfo wsInfo)
94 public JobId align(List<SequenceI> toalign, WsParamSetI parameters, List<ArgumentI> list) throws FormValidationException, IOException
96 StringBuilder builder = new StringBuilder();
97 for (SequenceI seq : toalign)
99 builder.append(">").append(seq.getName()).append("\n");
100 builder.append(seq.getSequence()).append("\n\n");
102 InputStream stream = new ByteArrayInputStream(builder.toString().getBytes());
103 RemoteFile file = client.uploadFile(stream, "input.fasta",
104 "application/fasta");
105 Form form = service.getForm();
106 form.insert("input", file);
107 String jobUUID = form.submit();
108 return new JobId("clustalo", "clustalo", jobUUID);
112 public AlignmentI getAlignmentFor(JobId jobId)
114 List<RemoteFile> files;
117 files = client.getJobResults(jobId.getJobId());
118 for (RemoteFile f: files) {
119 if (f.getMimeType().equals("application/clustal"))
121 return new FormatAdapter().readFile(f.getURL().toString(), DataSourceType.URL, FileFormat.Clustal);
124 } catch (IOException e1)
126 // TODO Auto-generated catch block
127 e1.printStackTrace();
133 public void initParamStore(ParamManager userParameterStore)
139 public Object getEndpoint()