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