X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fws2%2Fslivka%2FSlivkaWebService.java;h=e2873c16fc7f65da278dab6616aa90fa8fc99d89;hb=6fad8c3fe5fc07de005c19cded2df58dc34c3e03;hp=a2d7f20e96bdfdb3822161f8ea8fe0a944ef564d;hpb=e016e819d1f9d851aa28a273414b4432c2137858;p=jalview.git diff --git a/src/jalview/ws2/slivka/SlivkaWebService.java b/src/jalview/ws2/slivka/SlivkaWebService.java index a2d7f20..e2873c1 100644 --- a/src/jalview/ws2/slivka/SlivkaWebService.java +++ b/src/jalview/ws2/slivka/SlivkaWebService.java @@ -1,39 +1,36 @@ package jalview.ws2.slivka; +import static java.lang.String.format; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.EnumMap; -import java.util.HashSet; import java.util.List; -import java.util.Set; +import java.util.Map; -import jalview.api.AlignViewportI; +import jalview.api.FeatureColourI; import jalview.bin.Cache; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.SequenceI; +import jalview.datamodel.features.FeatureMatcherSetI; import jalview.io.AnnotationFile; import jalview.io.DataSourceType; import jalview.io.FeaturesFile; import jalview.io.FileFormat; -import jalview.io.FileFormatI; import jalview.io.FormatAdapter; import jalview.io.JPredFile; -import jalview.ws.gui.WsJob; import jalview.ws.params.ArgumentI; import jalview.ws.params.ParamDatastoreI; -import jalview.ws.params.WsParamSetI; import jalview.ws.slivkaws.SlivkaDatastore; -import jalview.ws2.WebServiceI; -import jalview.ws2.operations.Operation; import jalview.ws2.WSJob; import jalview.ws2.WSJobStatus; +import jalview.ws2.WebServiceI; import javajs.http.ClientProtocolException; import uk.ac.dundee.compbio.slivkaclient.Job; import uk.ac.dundee.compbio.slivkaclient.Parameter; @@ -46,11 +43,11 @@ public class SlivkaWebService implements WebServiceI protected final SlivkaClient client; protected final SlivkaService service; - + protected ParamDatastoreI store; protected static final EnumMap statusMap = new EnumMap<>( - Job.Status.class); + Job.Status.class); { statusMap.put(Job.Status.PENDING, WSJobStatus.SUBMITTED); statusMap.put(Job.Status.REJECTED, WSJobStatus.INVALID); @@ -113,7 +110,7 @@ public class SlivkaWebService implements WebServiceI @Override public String submit(List sequences, List args) - throws IOException + throws IOException { var request = new uk.ac.dundee.compbio.slivkaclient.JobRequest(); for (Parameter param : service.getParameters()) @@ -140,8 +137,8 @@ public class SlivkaWebService implements WebServiceI break; } InputStream stream = new ByteArrayInputStream(format.getWriter(null) - .print(sequences.toArray(new SequenceI[0]), false) - .getBytes()); + .print(sequences.toArray(new SequenceI[0]), false) + .getBytes()); request.addFile(param.getId(), stream); } } @@ -218,8 +215,7 @@ public class SlivkaWebService implements WebServiceI return false; } - public AlignmentI getAlignment(WSJob job, List dataset, - AlignViewportI viewport) throws IOException + public AlignmentI getAlignment(WSJob job) throws IOException { Collection files; var slivkaJob = client.getJob(job.getJobId()); @@ -229,61 +225,63 @@ public class SlivkaWebService implements WebServiceI if (f.getMediaType().equals("application/clustal")) { return new FormatAdapter().readFile(f.getContentUrl().toString(), - DataSourceType.URL, FileFormat.Clustal); + DataSourceType.URL, FileFormat.Clustal); } else if (f.getMediaType().equals("application/fasta")) { return new FormatAdapter().readFile(f.getContentUrl().toString(), - DataSourceType.URL, FileFormat.Fasta); + DataSourceType.URL, FileFormat.Fasta); } } return null; } - public FeaturesFile getFeaturesFile(WSJob job, - List dataset, AlignViewportI viewport) throws IOException + public List attachAnnotations(WSJob job, + List dataset, Map featureColours, + Map featureFilters) throws IOException { + RemoteFile annotFile = null; + RemoteFile featFile = null; + var slivkaJob = client.getJob(job.getJobId()); Collection files = slivkaJob.getResults(); for (RemoteFile f : files) { - if (f.getMediaType().equals("application/jalview-features")) - { - return new FeaturesFile(f.getContentUrl().toString(), DataSourceType.URL); - } + if (f.getMediaType().equals("application/jalview-annotations")) + annotFile = f; + else if (f.getMediaType().equals("application/jalview-features")) + featFile = f; } - return null; - } + Alignment aln = new Alignment(dataset.toArray(new SequenceI[0])); - public List getAnnotations(WSJob job, - List dataset, AlignViewportI viewport) throws IOException - { - var slivkaJob = client.getJob(job.getJobId()); - Collection files = slivkaJob.getResults(); - for (RemoteFile f : files) + boolean annotPresent = annotFile != null; + if (annotFile != null) { - if (f.getMediaType().equals("application/jalview-annotations")) - { - Alignment aln = new Alignment(dataset.toArray(new SequenceI[0])); - AnnotationFile af = new AnnotationFile(); - boolean valid = af.readAnnotationFileWithCalcId(aln, service.getId(), - f.getContentUrl().toString(), DataSourceType.URL); - if (valid) - { - return Arrays.asList(aln.getAlignmentAnnotation()); - } - else - { - throw new IOException("Unable to read annotations from file " + - f.getContentUrl().toString()); - } - } + AnnotationFile af = new AnnotationFile(); + annotPresent = af.readAnnotationFileWithCalcId( + aln, service.getId(), annotFile.getContentUrl().toString(), + DataSourceType.URL); } - return null; + if (annotPresent) + Cache.log.debug(format("Annotation file loaded %s", annotFile)); + else + Cache.log.debug(format("No annotations loaded from %s", annotFile)); + + boolean featPresent = featFile != null; + if (featFile != null) + { + FeaturesFile ff = new FeaturesFile(featFile.getContentUrl().toString(), + DataSourceType.URL); + featPresent = ff.parse(aln, featureColours, true); + } + if (featPresent) + Cache.log.debug(format("Features file loaded %s", featFile)); + else + Cache.log.debug(format("No features loaded from %s", annotFile)); + return Arrays.asList(aln.getAlignmentAnnotation()); } - public JPredFile getPrediction(WSJob job, List dataset, - AlignViewportI viewport) throws IOException + public JPredFile getPrediction(WSJob job) throws IOException { Collection files = client.getJob(job.getJobId()).getResults(); for (RemoteFile f : files)