JAL-4199 Update slivka client
[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       Collection<RemoteFile> files = client.fetchFilesList(jobId.getJobId());
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().readAnnotationFileWithCalcId(aln, service.getId(), annotFile.getContentUrl().toString(), DataSourceType.URL))
87     {
88       Console.debug("No annotation from slivka job\n" + annotFile);
89     }
90     else {
91       Console.debug("Annotation file loaded " + annotFile);
92     }
93     if (featFile == null
94         || !new FeaturesFile(featFile.getContentUrl().toString(), DataSourceType.URL).parse(aln, featureColours, true))
95     {
96       Console.debug("No features from slivka job\n" + featFile);
97     }
98     else {
99       Console.debug("Features feil loaded " + featFile);
100     }
101     return Arrays.asList(aln.getAlignmentAnnotation());
102   }
103 }