Merge branch 'Jalview-JS/develop' into feature/JAL-3690_callback-based-web-services
[jalview.git] / src / jalview / ws / jws2 / jabaws2 / JabawsMsaInstance.java
1 package jalview.ws.jws2.jabaws2;
2
3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.Sequence;
5 import jalview.datamodel.SequenceI;
6 import jalview.ws.api.CancellableI;
7 import jalview.ws.api.JobId;
8 import jalview.ws.api.MultipleSequenceAlignmentI;
9 import jalview.ws.jws2.JabaParamStore;
10 import jalview.ws.jws2.JabaPreset;
11 import jalview.ws.params.ArgumentI;
12 import jalview.ws.params.InvalidArgumentException;
13 import jalview.ws.params.WsParamSetI;
14
15 import java.io.IOError;
16 import java.rmi.ServerError;
17 import java.util.ArrayList;
18 import java.util.List;
19
20 import compbio.data.sequence.Alignment;
21 import compbio.data.sequence.FastaSequence;
22 import compbio.metadata.ResultNotAvailableException;
23
24 public class JabawsMsaInstance
25         extends JabawsServiceInstance<compbio.data.msa.MsaWS>
26         implements MultipleSequenceAlignmentI, CancellableI
27 {
28   @Override
29   public JobId align(List<SequenceI> toalign, WsParamSetI parameters,
30           List<ArgumentI> arguments) throws Throwable
31   {
32     List<compbio.data.sequence.FastaSequence> seqs = new ArrayList<>();
33     for (SequenceI seq : toalign)
34     {
35       seqs.add(new FastaSequence(seq.getName(), seq.getSequenceAsString()));
36     }
37     String jobid = null;
38     if (parameters != null)
39     {
40       if (parameters instanceof JabaPreset)
41       {
42         jobid = service.presetAlign(seqs,
43                 ((JabaPreset) parameters).getJabaPreset());
44       }
45       else
46       {
47         jobid = service.customAlign(seqs, JabaParamStore
48                 .getJabafromJwsArgs(parameters.getArguments()));
49       }
50     }
51     else if (arguments != null && arguments.size() > 0)
52     {
53       jobid = service.customAlign(seqs,
54               JabaParamStore.getJabafromJwsArgs(arguments));
55     }
56     else
57     {
58       jobid = service.align(seqs);
59     }
60
61     if (jobid == null)
62     {
63       return null;
64     }
65     return new JobId(our.getServiceType(), our.getName(), jobid);
66   }
67
68   @Override
69   public AlignmentI getAlignmentFor(JobId jobId)
70           throws InvalidArgumentException, ServerError, IOError
71   {
72     Alignment alignment = null;
73     try
74     {
75       alignment = service.getResult(jobId.getJobId());
76     } catch (ResultNotAvailableException rnotav)
77     {
78
79       // TODO - migrate JABA exception
80       // throw new ServerError("Couldn't get result for job",rnotav);
81     }
82     SequenceI[] alseqs;
83     int alseq_l = 0;
84     if (alignment.getSequences().size() == 0)
85     {
86       return null;
87     }
88
89     alseqs = new SequenceI[alignment.getSequences().size()];
90     for (compbio.data.sequence.FastaSequence seq : alignment.getSequences())
91     {
92       alseqs[alseq_l++] = new Sequence(seq.getId(), seq.getSequence());
93     }
94     AlignmentI jv_al = new jalview.datamodel.Alignment(alseqs);
95     jv_al.setGapCharacter(alignment.getMetadata().getGapchar());
96     return jv_al;
97
98   }
99
100   public JabawsMsaInstance(Jws2Instance handle)
101   {
102     super(handle);
103   }
104
105 }