cc5c1e4a75ef0c9fe9f16eb27a5cd8e11584ba52
[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.List;
23 import java.util.Map;
24
25 import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
26 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
27 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
28
29 public class SlivkaAnnotationServiceInstance extends SlivkaWSInstance implements SequenceAnnotationServiceI
30 {
31   public SlivkaAnnotationServiceInstance(SlivkaClient client,
32           SlivkaService service, boolean conservation)
33   {
34     super(client, service, !conservation ? "Protein sequence analysis"
35         : "Alignment Conservation");
36     if (conservation)
37     {
38       setAlignAnalysisUI(new AlignAnalysisUIText(getName(),
39               SlivkaAnnotationServiceInstance.class,
40               "Slivka.AACons", false, true, true, true, true, 2,
41               MessageManager.getString("label.aacon_calculations"),
42               MessageManager.getString("tooltip.aacon_calculations"),
43               MessageManager.getString("label.aacon_settings"),
44               MessageManager.getString("tooltip.aacon_settings")));
45     }
46     style = ServiceClient.SEQUENCEANNOTATIONWSCLIENT;
47   }
48
49   @Override
50   public JobId submitToService(List<SequenceI> seqs, WsParamSetI preset, List<ArgumentI> paramset) throws Throwable
51   {
52     return super.submit(seqs, preset, paramset);
53   }
54
55   @Override
56   public List<AlignmentAnnotation> getAnnotationResult(JobId job,
57           List<SequenceI> seqs, Map<String, FeatureColourI> featureColours,
58           Map<String, FeatureMatcherSetI> featureFilters) throws Throwable
59   {
60     RemoteFile annotFile = null;
61     RemoteFile featFile = null;
62     try
63     {
64       List<RemoteFile> files = client.getJobResults(job.getJobId());
65       for (RemoteFile f : files)
66       {
67         if (f.getMimeType().equals("application/jalview-annotations"))
68         {
69           annotFile = f;
70         }
71         else if (f.getMimeType().equals("application/jalview-features"))
72         {
73           featFile = f;
74         }
75       }
76     } catch (IOException e)
77     {
78       throw new IOError(e);
79     }
80     Alignment aln = new Alignment(seqs.toArray(new SequenceI[0]));
81     if (annotFile == null
82         || !new AnnotationFile().readAnnotationFile(aln, annotFile.getURL().toString(), DataSourceType.URL))
83     {
84       Cache.log.debug("No annotation from slivka job\n" + annotFile);
85     }
86     if (featFile == null
87         || !new FeaturesFile(featFile.getURL().toString(), DataSourceType.URL).parse(aln, featureColours, true))
88     {
89       Cache.log.debug("No features from slivka job\n" + featFile);
90     }
91     return Arrays.asList(aln.getAlignmentAnnotation());
92   }
93 }