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