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.ParamDatastoreI;
16 import jalview.ws.params.ParamManager;
17 import jalview.ws.params.WsParamSetI;
19 import java.io.ByteArrayInputStream;
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.util.EnumMap;
23 import java.util.HashMap;
24 import java.util.List;
26 import uk.ac.dundee.compbio.slivkaclient.FieldType;
27 import uk.ac.dundee.compbio.slivkaclient.Form;
28 import uk.ac.dundee.compbio.slivkaclient.FormField;
29 import uk.ac.dundee.compbio.slivkaclient.FormValidationException;
30 import uk.ac.dundee.compbio.slivkaclient.JobState;
31 import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
32 import uk.ac.dundee.compbio.slivkaclient.Service;
33 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
34 import uk.ac.dundee.compbio.slivkaclient.ValidationException;
36 public class ClustaloWS extends ServiceWithParameters
37 implements MultipleSequenceAlignmentI, JalviewServiceEndpointProviderI
39 private SlivkaClient client;
40 private Service service;
41 private SlivkaDatastore store = null;
43 private EnumMap<JobState, WsJob.JobState> stateMap = new EnumMap<>(JobState.class);
45 stateMap.put(JobState.PENDING, WsJob.JobState.QUEUED);
46 stateMap.put(JobState.QUEUED, WsJob.JobState.QUEUED);
47 stateMap.put(JobState.RUNNING, WsJob.JobState.RUNNING);
48 stateMap.put(JobState.COMPLETED, WsJob.JobState.FINISHED);
49 stateMap.put(JobState.FAILED, WsJob.JobState.FAILED);
50 stateMap.put(JobState.ERROR, WsJob.JobState.SERVERERROR);
51 stateMap.put(JobState.UNKNOWN, WsJob.JobState.UNKNOWN);
55 ClustaloWS(SlivkaClient client)
57 super("ClustalO", "Alignment", "ClustalO", "Slivka", client.getUrl().toString());
62 this.service = client.getService("clustalo");
63 } catch (IOException e)
65 throw new RuntimeException(e);
70 public void updateStatus(WsJob job)
74 job.setState(stateMap.get(client.getJobState(job.getJobId())));
75 } catch (IOException e)
77 throw new RuntimeException(e);
87 public boolean updateJobProgress(WsJob job)
93 public boolean handleSubmitError(Throwable _lex, WsJob j, WebserviceInfo wsInfo)
99 public boolean handleCollectionException(Exception e, WsJob msjob, WebserviceInfo wsInfo)
105 public JobId align(List<SequenceI> toalign, WsParamSetI parameters, List<ArgumentI> list)
108 StringBuilder builder = new StringBuilder();
109 for (SequenceI seq : toalign)
111 builder.append(">").append(seq.getName()).append("\n");
112 builder.append(seq.getSequence()).append("\n");
114 InputStream stream = new ByteArrayInputStream(builder.toString().getBytes());
115 RemoteFile file = client.uploadFile(stream, "input.fasta", "application/fasta");
116 Form form = service.getForm();
117 HashMap<String, String> values = new HashMap<>(list != null ? list.size() : 0);
120 for (ArgumentI arg : list)
122 values.put(arg.getName(), arg.getValue());
125 for (FormField field : form.getFields())
127 if (field.getType() == FieldType.FILE)
129 form.insert(field.getName(), file);
132 form.insert(field.getName(), field.valueOf(values.get(field.getName())));
137 return new JobId("clustalo", "clustalo", form.submit());
138 } catch (FormValidationException e)
140 for (ValidationException ve : e.getErrors())
142 System.out.format("%s: %s%n", ve.getField().getName(), ve.getMessage());
149 public AlignmentI getAlignmentFor(JobId jobId)
151 List<RemoteFile> files;
154 files = client.getJobResults(jobId.getJobId());
155 for (RemoteFile f: files) {
156 if (f.getMimeType().equals("application/clustal"))
158 return new FormatAdapter().readFile(f.getURL().toString(), DataSourceType.URL, FileFormat.Clustal);
161 } catch (IOException e1)
163 // TODO Auto-generated catch block
164 e1.printStackTrace();
170 public void initParamStore(ParamManager userParameterStore)
176 store = new SlivkaDatastore(service);
177 } catch (IOException e)
179 throw new RuntimeException(e);
185 public boolean hasParameters()
191 public ParamDatastoreI getParamStore()
197 public Object getEndpoint()