1 package jalview.ws.slivkaws;
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;
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;
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;
31 public class SlivkaAnnotationServiceInstance extends SlivkaWSInstance implements SequenceAnnotationServiceI
33 public SlivkaAnnotationServiceInstance(SlivkaClient client,
34 SlivkaService service, String category)
36 super(client, service, category);
37 if (category == Category.CATEGORY_CONSERVATION)
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")));
49 style = ServiceClient.SEQUENCEANNOTATIONWSCLIENT;
53 public JobId submitToService(List<SequenceI> seqs, WsParamSetI preset, List<ArgumentI> paramset) throws Throwable
55 return super.submit(seqs, preset, paramset);
59 public List<AlignmentAnnotation> getAnnotationResult(JobId jobId,
60 List<SequenceI> seqs, Map<String, FeatureColourI> featureColours,
61 Map<String, FeatureMatcherSetI> featureFilters) throws Throwable
63 RemoteFile annotFile = null;
64 RemoteFile featFile = null;
67 var slivkaJob = client.getJob(jobId.getJobId());
68 Collection<RemoteFile> files = slivkaJob.getResults();
69 for (RemoteFile f : files)
71 if (f.getMediaType().equals("application/jalview-annotations"))
75 else if (f.getMediaType().equals("application/jalview-features"))
80 } catch (IOException e)
84 Alignment aln = new Alignment(seqs.toArray(new SequenceI[0]));
86 || !new AnnotationFile().readAnnotationFileWithCalcId(aln, service.getId(), annotFile.getContentUrl().toString(), DataSourceType.URL))
88 Cache.log.debug("No annotation from slivka job\n" + annotFile);
91 Cache.log.debug("Annotation file loaded " + annotFile);
94 || !new FeaturesFile(featFile.getContentUrl().toString(), DataSourceType.URL).parse(aln, featureColours, true))
96 Cache.log.debug("No features from slivka job\n" + featFile);
99 Cache.log.debug("Features feil loaded " + featFile);
101 return Arrays.asList(aln.getAlignmentAnnotation());