1 package jalview.ws.slivkaws;
3 import jalview.api.FeatureColourI;
4 import jalview.datamodel.Alignment;
5 import jalview.datamodel.AlignmentAnnotation;
6 import jalview.datamodel.SequenceI;
7 import jalview.datamodel.features.FeatureMatcherSetI;
8 import jalview.io.AnnotationFile;
9 import jalview.ws.api.JobId;
10 import jalview.ws.api.SequenceAnnotationServiceI;
11 import jalview.ws.params.ArgumentI;
12 import jalview.ws.params.WsParamSetI;
14 import java.io.BufferedReader;
15 import java.io.ByteArrayInputStream;
16 import java.io.IOError;
17 import java.io.IOException;
18 import java.io.InputStream;
19 import java.io.InputStreamReader;
20 import java.util.Arrays;
21 import java.util.HashMap;
22 import java.util.List;
25 import uk.ac.dundee.compbio.slivkaclient.FormField;
26 import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
27 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
28 import uk.ac.dundee.compbio.slivkaclient.SlivkaForm;
29 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
31 public class SlivkaAnnotationServiceInstance extends SlivkaWSInstance implements SequenceAnnotationServiceI
33 public SlivkaAnnotationServiceInstance(SlivkaClient client, SlivkaService service)
35 super(client, service, "Annotations disorder");
39 public JobId submitToService(List<SequenceI> seqs, WsParamSetI preset, List<ArgumentI> paramset) throws Throwable
41 StringBuilder builder = new StringBuilder();
42 for (SequenceI seq : seqs)
44 builder.append(">").append(seq.getName()).append("\n");
45 builder.append(seq.getSequence()).append("\n");
47 InputStream stream = new ByteArrayInputStream(builder.toString().getBytes());
48 RemoteFile file = client.uploadFile(stream, "input.fasta", "application/fasta");
49 SlivkaForm form = service.getForm();
50 HashMap<String, String> values = new HashMap<>(paramset != null ? paramset.size() : 0);
53 for (ArgumentI arg : paramset)
55 values.put(arg.getName(), arg.getValue());
58 for (FormField field : form.getFields())
60 switch (field.getType())
63 form.insert(field.getName(), file);
66 String value = values.get(field.getName());
67 form.insert(field.getName(), value != null && !value.isBlank() ? true : false);
70 form.insert(field.getName(), field.valueOf(values.get(field.getName())));
73 return new JobId(service.getName(), service.getName(), form.submit());
77 public List<AlignmentAnnotation> getAnnotationResult(JobId job,
78 List<SequenceI> seqs, Map<String, FeatureColourI> featureColours,
79 Map<String, FeatureMatcherSetI> featureFilters) throws Throwable
81 RemoteFile annotFile = null;
82 RemoteFile featFile = null;
85 List<RemoteFile> files = client.getJobResults(job.getJobId());
86 for (RemoteFile f : files)
88 if (f.getMimeType().equals("application/jalview-annotations"))
92 else if (f.getMimeType().equals("application/jalview-features"))
97 } catch (IOException e)
101 Alignment aln = new Alignment(seqs.toArray(new SequenceI[0]));
102 BufferedReader in = new BufferedReader(new InputStreamReader(annotFile.getContent()));
103 AnnotationFile f = new AnnotationFile();
104 f.parseAnnotationFrom(aln, null, in);
105 return Arrays.asList(aln.getAlignmentAnnotation());