JAL-3070 oops - refactor Slivka’s service stub too :)
[jalview.git] / src / jalview / ws / slivkaws / SlivkaAnnotationServiceInstance.java
1 package jalview.ws.slivkaws;
2
3 import jalview.api.FeatureColourI;
4 import jalview.datamodel.AlignmentAnnotation;
5 import jalview.datamodel.SequenceI;
6 import jalview.datamodel.features.FeatureMatcherSetI;
7 import jalview.ws.api.JobId;
8 import jalview.ws.api.SequenceAnnotationServiceI;
9 import jalview.ws.params.ArgumentI;
10 import jalview.ws.params.WsParamSetI;
11
12 import java.io.ByteArrayInputStream;
13 import java.io.InputStream;
14 import java.util.HashMap;
15 import java.util.List;
16 import java.util.Map;
17
18 import uk.ac.dundee.compbio.slivkaclient.FormField;
19 import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
20 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
21 import uk.ac.dundee.compbio.slivkaclient.SlivkaForm;
22 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
23
24 public class SlivkaAnnotationServiceInstance extends SlivkaWSInstance implements SequenceAnnotationServiceI
25 {
26   public SlivkaAnnotationServiceInstance(SlivkaClient client, SlivkaService service)
27   {
28     super(client, service, "Annotations");
29   }
30
31   @Override
32   public JobId submitToService(List<SequenceI> seqs, WsParamSetI preset, List<ArgumentI> paramset) throws Throwable
33   {
34     StringBuilder builder = new StringBuilder();
35     for (SequenceI seq : seqs)
36     {
37       builder.append(">").append(seq.getName()).append("\n");
38       builder.append(seq.getSequence()).append("\n");
39     }
40     InputStream stream = new ByteArrayInputStream(builder.toString().getBytes());
41     RemoteFile file = client.uploadFile(stream, "input.fasta", "application/fasta");
42     SlivkaForm form = service.getForm();
43     HashMap<String, String> values = new HashMap<>(paramset != null ? paramset.size() : 0);
44     if (paramset != null)
45     {
46       for (ArgumentI arg : paramset)
47       {
48         values.put(arg.getName(), arg.getValue());
49       }
50     }
51     for (FormField field : form.getFields())
52     {
53       switch (field.getType())
54       {
55       case FILE:
56         form.insert(field.getName(), file);
57         break;
58       case BOOLEAN:
59         String value = values.get(field.getName());
60         form.insert(field.getName(), value != null && !value.isBlank() ? true : false);
61         break;
62       default:
63         form.insert(field.getName(), field.valueOf(values.get(field.getName())));
64       }
65     }
66     return new JobId(service.getName(), service.getName(), form.submit());
67   }
68
69   @Override
70   public List<AlignmentAnnotation> getAnnotationResult(JobId job,
71           List<SequenceI> seqs, Map<String, FeatureColourI> featureColours,
72           Map<String, FeatureMatcherSetI> featureFilters) throws Throwable
73   {
74     // TODO Auto-generated method stub
75     return null;
76   }
77 }