JAL-3848 Update slivka client library.
[jalview.git] / src / jalview / ws / slivkaws / SlivkaAnnotationServiceInstance.java
1 package jalview.ws.slivkaws;
2
3 import jalview.api.FeatureColourI;
4 import jalview.bin.Cache;
5 import jalview.datamodel.Alignment;
6 import jalview.datamodel.AlignmentAnnotation;
7 import jalview.datamodel.SequenceI;
8 import jalview.datamodel.features.FeatureMatcherSetI;
9 import jalview.io.AnnotationFile;
10 import jalview.io.DataSourceType;
11 import jalview.io.FeaturesFile;
12 import jalview.util.MessageManager;
13 import jalview.ws.api.JobId;
14 import jalview.ws.api.SequenceAnnotationServiceI;
15 import jalview.ws.params.ArgumentI;
16 import jalview.ws.params.WsParamSetI;
17 import jalview.ws.uimodel.AlignAnalysisUIText;
18
19 import java.io.IOError;
20 import java.io.IOException;
21 import java.util.Arrays;
22 import java.util.Collection;
23 import java.util.List;
24 import java.util.Map;
25
26 import compbio.data.msa.Category;
27 import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
28 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
29 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
30
31 public class SlivkaAnnotationServiceInstance extends SlivkaWSInstance implements SequenceAnnotationServiceI
32 {
33   public SlivkaAnnotationServiceInstance(SlivkaClient client,
34           SlivkaService service, String category)
35   {
36     super(client, service, category);
37     if (category == Category.CATEGORY_CONSERVATION)
38     {
39       /* FIXME: the category name is hardcoded for AACon, names other than
40        * "AAConWS" doesn't work. */
41       setAlignAnalysisUI(new AlignAnalysisUIText(getName(),
42               SlivkaAnnotationServiceInstance.class,
43               "Slivka.AACons", false, true, true, true, true, 2,
44               MessageManager.getString("label.aacon_calculations"),
45               MessageManager.getString("tooltip.aacon_calculations"),
46               MessageManager.getString("label.aacon_settings"),
47               MessageManager.getString("tooltip.aacon_settings")));
48     }
49     style = ServiceClient.SEQUENCEANNOTATIONWSCLIENT;
50   }
51
52   @Override
53   public JobId submitToService(List<SequenceI> seqs, WsParamSetI preset, List<ArgumentI> paramset) throws Throwable
54   {
55     return super.submit(seqs, preset, paramset);
56   }
57
58   @Override
59   public List<AlignmentAnnotation> getAnnotationResult(JobId jobId,
60           List<SequenceI> seqs, Map<String, FeatureColourI> featureColours,
61           Map<String, FeatureMatcherSetI> featureFilters) throws Throwable
62   {
63     RemoteFile annotFile = null;
64     RemoteFile featFile = null;
65     try
66     {
67       var slivkaJob = client.getJob(jobId.getJobId());
68       Collection<RemoteFile> files = slivkaJob.getResults();
69       for (RemoteFile f : files)
70       {
71         if (f.getMediaType().equals("application/jalview-annotations"))
72         {
73           annotFile = f;
74         }
75         else if (f.getMediaType().equals("application/jalview-features"))
76         {
77           featFile = f;
78         }
79       }
80     } catch (IOException e)
81     {
82       throw new IOError(e);
83     }
84     Alignment aln = new Alignment(seqs.toArray(new SequenceI[0]));
85     if (annotFile == null
86         || !new AnnotationFile().readAnnotationFile(aln, annotFile.getContentUrl().toString(), DataSourceType.URL))
87     {
88       Cache.log.debug("No annotation from slivka job\n" + annotFile);
89     }
90     else {
91       Cache.log.debug("Annotation file loaded " + annotFile);
92     }
93     if (featFile == null
94         || !new FeaturesFile(featFile.getContentUrl().toString(), DataSourceType.URL).parse(aln, featureColours, true))
95     {
96       Cache.log.debug("No features from slivka job\n" + featFile);
97     }
98     else {
99       Cache.log.debug("Features feil loaded " + featFile);
100     }
101     return Arrays.asList(aln.getAlignmentAnnotation());
102   }
103 }