--- /dev/null
+package jalview.ws.slivkaws;
+
+import jalview.api.FeatureColourI;
+import jalview.bin.Cache;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.SequenceI;
+import jalview.datamodel.features.FeatureMatcherSetI;
+import jalview.io.AnnotationFile;
+import jalview.io.DataSourceType;
+import jalview.io.FeaturesFile;
+import jalview.util.MessageManager;
+import jalview.ws.api.JobId;
+import jalview.ws.api.SequenceAnnotationServiceI;
+import jalview.ws.params.ArgumentI;
+import jalview.ws.params.WsParamSetI;
+import jalview.ws.uimodel.AlignAnalysisUIText;
+
+import java.io.IOError;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import uk.ac.dundee.compbio.slivkaclient.RemoteFile;
+import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
+import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
+
+public class SlivkaAnnotationServiceInstance extends SlivkaWSInstance implements SequenceAnnotationServiceI
+{
+ public SlivkaAnnotationServiceInstance(SlivkaClient client,
+ SlivkaService service, boolean conservation)
+ {
+ super(client, service, !conservation ? "Protein sequence analysis"
+ : "Alignment Conservation");
+ if (conservation)
+ {
+ setAlignAnalysisUI(new AlignAnalysisUIText(getName(),
+ SlivkaAnnotationServiceInstance.class,
+ "Slivka.AACons", false, true, true, true, true, 2,
+ MessageManager.getString("label.aacon_calculations"),
+ MessageManager.getString("tooltip.aacon_calculations"),
+ MessageManager.getString("label.aacon_settings"),
+ MessageManager.getString("tooltip.aacon_settings")));
+ }
+ style = ServiceClient.SEQUENCEANNOTATIONWSCLIENT;
+ }
+
+ @Override
+ public JobId submitToService(List<SequenceI> seqs, WsParamSetI preset, List<ArgumentI> paramset) throws Throwable
+ {
+ return super.submit(seqs, preset, paramset);
+ }
+
+ @Override
+ public List<AlignmentAnnotation> getAnnotationResult(JobId job,
+ List<SequenceI> seqs, Map<String, FeatureColourI> featureColours,
+ Map<String, FeatureMatcherSetI> featureFilters) throws Throwable
+ {
+ RemoteFile annotFile = null;
+ RemoteFile featFile = null;
+ try
+ {
+ List<RemoteFile> files = client.getJobResults(job.getJobId());
+ for (RemoteFile f : files)
+ {
+ if (f.getMimeType().equals("application/jalview-annotations"))
+ {
+ annotFile = f;
+ }
+ else if (f.getMimeType().equals("application/jalview-features"))
+ {
+ featFile = f;
+ }
+ }
+ } catch (IOException e)
+ {
+ throw new IOError(e);
+ }
+ Alignment aln = new Alignment(seqs.toArray(new SequenceI[0]));
+ if (annotFile == null
+ || !new AnnotationFile().readAnnotationFile(aln, annotFile.getURL().toString(), DataSourceType.URL))
+ {
+ Cache.log.debug("No annotation from slivka job\n" + annotFile);
+ }
+ if (featFile == null
+ || !new FeaturesFile(featFile.getURL().toString(), DataSourceType.URL).parse(aln, featureColours, true))
+ {
+ Cache.log.debug("No features from slivka job\n" + featFile);
+ }
+ return Arrays.asList(aln.getAlignmentAnnotation());
+ }
+}