1 package jalview.ws.slivkaws;
3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.SequenceI;
5 import jalview.io.DataSourceType;
6 import jalview.io.FileFormat;
7 import jalview.io.FormatAdapter;
8 import jalview.ws.api.JobId;
9 import jalview.ws.api.MultipleSequenceAlignmentI;
10 import jalview.ws.params.ArgumentI;
11 import jalview.ws.params.InvalidArgumentException;
12 import jalview.ws.params.WsParamSetI;
14 import java.io.ByteArrayInputStream;
15 import java.io.IOError;
16 import java.io.IOException;
17 import java.io.InputStream;
18 import java.rmi.ServerError;
19 import java.util.HashMap;
20 import java.util.List;
22 import uk.ac.dundee.compbio.slivkaclient.FormField;
23 import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
24 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
25 import uk.ac.dundee.compbio.slivkaclient.SlivkaForm;
26 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
28 public class SlivkaMsaServiceInstance extends SlivkaWSInstance implements MultipleSequenceAlignmentI
30 SlivkaMsaServiceInstance(SlivkaClient client, SlivkaService service) {
31 super(client, service, "Alignment");
32 style = ServiceClient.MSAWSCLIENT;
36 public JobId align(List<SequenceI> toalign, WsParamSetI parameters, List<ArgumentI> list) throws Throwable
38 StringBuilder builder = new StringBuilder();
39 for (SequenceI seq : toalign)
41 builder.append(">").append(seq.getName()).append("\n");
42 builder.append(seq.getSequence()).append("\n");
44 InputStream stream = new ByteArrayInputStream(builder.toString().getBytes());
45 RemoteFile file = client.uploadFile(stream, "input.fasta", "application/fasta");
46 SlivkaForm form = service.getForm();
47 HashMap<String, String> values = new HashMap<>(list != null ? list.size() : 0);
50 for (ArgumentI arg : list)
52 values.put(arg.getName(), arg.getValue());
55 for (FormField field : form.getFields())
57 switch (field.getType()) {
59 form.insert(field.getName(), file);
62 String value = values.get(field.getName());
63 form.insert(field.getName(), (value != null && !value.isBlank()) ? true : false);
66 form.insert(field.getName(), field.valueOf(values.get(field.getName())));
69 return new JobId(service.getName(), service.getName(), form.submit());
73 public AlignmentI getAlignmentFor(JobId jobId) throws InvalidArgumentException, ServerError, IOError
75 List<RemoteFile> files;
78 files = client.getJobResults(jobId.getJobId());
79 for (RemoteFile f : files)
81 if (f.getMimeType().equals("application/clustal"))
83 return new FormatAdapter().readFile(f.getURL().toString(), DataSourceType.URL, FileFormat.Clustal);
85 else if (f.getMimeType().equals("application/fasta"))
87 return new FormatAdapter().readFile(f.getURL().toString(), DataSourceType.URL, FileFormat.Fasta);
90 } catch (IOException e)