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;
protected final SlivkaClient client;
protected final SlivkaService service;
-
+
protected ParamDatastoreI store;
protected static final EnumMap<Job.Status, WSJobStatus> statusMap = new EnumMap<>(
- Job.Status.class);
+ Job.Status.class);
{
statusMap.put(Job.Status.PENDING, WSJobStatus.SUBMITTED);
statusMap.put(Job.Status.REJECTED, WSJobStatus.INVALID);
@Override
public String submit(List<SequenceI> sequences, List<ArgumentI> args)
- throws IOException
+ throws IOException
{
var request = new uk.ac.dundee.compbio.slivkaclient.JobRequest();
for (Parameter param : service.getParameters())
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);
}
}
return false;
}
- public AlignmentI getAlignment(WSJob job, List<SequenceI> dataset,
- AlignViewportI viewport) throws IOException
+ public AlignmentI getAlignment(WSJob job) throws IOException
{
Collection<RemoteFile> files;
var slivkaJob = client.getJob(job.getJobId());
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<SequenceI> dataset, AlignViewportI viewport) throws IOException
+ public List<AlignmentAnnotation> attachAnnotations(WSJob job,
+ List<SequenceI> dataset, Map<String, FeatureColourI> featureColours,
+ Map<String, FeatureMatcherSetI> featureFilters) throws IOException
{
+ RemoteFile annotFile = null;
+ RemoteFile featFile = null;
+
var slivkaJob = client.getJob(job.getJobId());
Collection<RemoteFile> 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<AlignmentAnnotation> getAnnotations(WSJob job,
- List<SequenceI> dataset, AlignViewportI viewport) throws IOException
- {
- var slivkaJob = client.getJob(job.getJobId());
- Collection<RemoteFile> 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<SequenceI> dataset,
- AlignViewportI viewport) throws IOException
+ public JPredFile getPrediction(WSJob job) throws IOException
{
Collection<RemoteFile> files = client.getJob(job.getJobId()).getResults();
for (RemoteFile f : files)