--- /dev/null
+package jalview.ws.jws2.jabaws2;
+
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
+import jalview.ws.api.CancellableI;
+import jalview.ws.api.JobId;
+import jalview.ws.api.MultipleSequenceAlignmentI;
+import jalview.ws.jws2.JabaParamStore;
+import jalview.ws.jws2.JabaPreset;
+import jalview.ws.params.ArgumentI;
+import jalview.ws.params.InvalidArgumentException;
+import jalview.ws.params.WsParamSetI;
+
+import java.io.IOError;
+import java.rmi.ServerError;
+import java.util.ArrayList;
+import java.util.List;
+
+import compbio.data.sequence.Alignment;
+import compbio.data.sequence.FastaSequence;
+import compbio.metadata.ResultNotAvailableException;
+
+public class JabawsMsaInstance
+ extends JabawsServiceInstance<compbio.data.msa.MsaWS>
+ implements MultipleSequenceAlignmentI, CancellableI
+{
+ @Override
+ public JobId align(List<SequenceI> toalign, WsParamSetI parameters,
+ List<ArgumentI> arguments) throws Throwable
+ {
+ List<compbio.data.sequence.FastaSequence> seqs = new ArrayList<>();
+ for (SequenceI seq : toalign)
+ {
+ seqs.add(new FastaSequence(seq.getName(), seq.getSequenceAsString()));
+ }
+ String jobid = null;
+ if (parameters != null)
+ {
+ if (parameters instanceof JabaPreset)
+ {
+ jobid = service.presetAlign(seqs,
+ ((JabaPreset) parameters).getJabaPreset());
+ }
+ else
+ {
+ jobid = service.customAlign(seqs, JabaParamStore
+ .getJabafromJwsArgs(parameters.getArguments()));
+ }
+ }
+ else if (arguments != null && arguments.size() > 0)
+ {
+ jobid = service.customAlign(seqs,
+ JabaParamStore.getJabafromJwsArgs(arguments));
+ }
+ else
+ {
+ jobid = service.align(seqs);
+ }
+
+ if (jobid == null)
+ {
+ return null;
+ }
+ return new JobId(our.getServiceType(), our.getName(), jobid);
+ }
+
+ @Override
+ public AlignmentI getAlignmentFor(JobId jobId)
+ throws InvalidArgumentException, ServerError, IOError
+ {
+ Alignment alignment = null;
+ try
+ {
+ alignment = service.getResult(jobId.getJobId());
+ } catch (ResultNotAvailableException rnotav)
+ {
+
+ // TODO - migrate JABA exception
+ // throw new ServerError("Couldn't get result for job",rnotav);
+ }
+ SequenceI[] alseqs;
+ int alseq_l = 0;
+ if (alignment.getSequences().size() == 0)
+ {
+ return null;
+ }
+
+ alseqs = new SequenceI[alignment.getSequences().size()];
+ for (compbio.data.sequence.FastaSequence seq : alignment.getSequences())
+ {
+ alseqs[alseq_l++] = new Sequence(seq.getId(), seq.getSequence());
+ }
+ AlignmentI jv_al = new jalview.datamodel.Alignment(alseqs);
+ jv_al.setGapCharacter(alignment.getMetadata().getGapchar());
+ return jv_al;
+
+ }
+
+ public JabawsMsaInstance(Jws2Instance handle)
+ {
+ super(handle);
+ }
+
+}