f838b16013f8a2ec28ea21d2bea4079588e7d141
[jabaws.git] / webservices / compbio / ws / server / RNAalifoldWS.java
1 package compbio.ws.server;
2
3 import java.io.File;
4 import java.util.List;
5
6 import javax.jws.WebParam;
7 import javax.jws.WebService;
8
9 import org.apache.log4j.Logger;
10
11 import compbio.data.msa.FoldWS;
12 import compbio.data.msa.JABAService;
13 import compbio.data.msa.JManagement;
14 import compbio.data.msa.Metadata;
15 import compbio.data.sequence.Alignment;
16 import compbio.data.sequence.RNAstruct;
17 import compbio.data.sequence.FastaSequence;
18 import compbio.engine.AsyncExecutor;
19 import compbio.engine.Configurator;
20 import compbio.engine.client.ConfiguredExecutable;
21 import compbio.engine.client.SkeletalExecutable;
22 import compbio.metadata.ChunkHolder;
23 import compbio.metadata.JobStatus;
24 import compbio.metadata.JobSubmissionException;
25 import compbio.metadata.Limit;
26 import compbio.metadata.LimitsManager;
27 import compbio.metadata.Option;
28 import compbio.metadata.Preset;
29 import compbio.metadata.PresetManager;
30 import compbio.metadata.ResultNotAvailableException;
31 import compbio.metadata.RunnerConfig;
32 import compbio.metadata.WrongParameterException;
33 import compbio.runner.Util;
34 import compbio.runner.structure.RNAalifold;
35
36 @WebService(endpointInterface = "compbio.data.msa.FoldWS", targetNamespace = JABAService.SERVICE_NAMESPACE, serviceName = "RNAalifoldWS")
37 public class RNAalifoldWS implements FoldWS<RNAalifold> {
38
39         private static Logger log = Logger.getLogger(ClustalWS.class);
40         
41         private static final RunnerConfig<RNAalifold> rnaalifoldOptions = Util.
42                         getSupportedOptions(RNAalifold.class);
43         
44         private static final PresetManager<RNAalifold> rnaalifoldPresets = Util
45                         .getPresets(RNAalifold.class);
46
47         private static final LimitsManager<RNAalifold> limitMan = compbio.engine.client.Util
48                         .getLimits(new RNAalifold().getType());
49         
50
51         @Override
52         public String fold(Alignment alignment)
53                         throws JobSubmissionException {
54                 
55                 // Validate clustal input here?
56                 ConfiguredExecutable<RNAalifold> confRNAalifold = init(alignment);
57                 return WSUtil.fold(alignment, confRNAalifold, log, "fold", getLimit(""));
58         }
59         
60         
61         ConfiguredExecutable<RNAalifold> init(Alignment dataset) throws JobSubmissionException {
62                 RNAalifold rnaalifold = new RNAalifold();
63                 rnaalifold.setInput(SkeletalExecutable.INPUT)
64                                 .setOutput(SkeletalExecutable.OUTPUT)
65                                 .setError(SkeletalExecutable.ERROR);
66                 ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
67                                 .configureExecutable(rnaalifold, dataset.getSequences());
68                 return confRNAalifold;
69         }
70         
71         @Override
72         public String presetFold(Alignment alignment,
73                         Preset<RNAalifold> preset) throws JobSubmissionException,
74                         WrongParameterException {
75                 // validate
76                 if (preset == null) {
77                         throw new WrongParameterException("Preset must be Provided!");
78                 }
79                 Limit<RNAalifold> limit = getLimit(preset.getName());
80                 ConfiguredExecutable<RNAalifold> confRNAalifold = init(alignment);
81                 confRNAalifold.addParameters(preset.getOptions());
82                 return WSUtil.fold(alignment, confRNAalifold, log, "presetFold", limit);
83         }
84                 
85         @Override 
86         public String customFold(Alignment alignment,
87                         List<Option<RNAalifold>> options) throws JobSubmissionException,
88                         WrongParameterException {
89                 // validate
90                 ConfiguredExecutable<RNAalifold> confRNAalifold = init(alignment);
91                 List<String> params = WSUtil.getCommands(options, 
92                                 RNAalifold.KEY_VALUE_SEPARATOR);
93                 confRNAalifold.addParameters(params);
94                 log.info("Setting parameters: " + params);
95                 return WSUtil.fold(alignment, confRNAalifold, log, "customFold", 
96                                 getLimit(""));
97         }
98         
99         @Override
100         public RunnerConfig<RNAalifold> getRunnerOptions() {
101                 return rnaalifoldOptions;
102         }
103         
104         @SuppressWarnings("unchecked")
105         public RNAstruct getResult(String jobId) throws ResultNotAvailableException {
106                 
107                 WSUtil.validateJobId(jobId);
108                 AsyncExecutor asyncEngine = Configurator.getAsyncEngine(jobId);
109                 ConfiguredExecutable<RNAalifold> rnaalifold = (ConfiguredExecutable<RNAalifold>) asyncEngine
110                                 .getResults(jobId);
111                 return rnaalifold.getResults();
112         }
113         
114         @Override
115         public boolean cancelJob(String jobId) {
116                 WSUtil.validateJobId(jobId);
117                 boolean result = WSUtil.cancelJob(jobId);
118                 return result;
119         }
120         
121         @Override
122         public JobStatus getJobStatus(String jobId) {
123                 WSUtil.validateJobId(jobId);
124                 JobStatus status = WSUtil.getJobStatus(jobId);
125                 return status;
126         }
127         
128         @Override
129         public Limit<RNAalifold> getLimit(String presetName) {
130                 if (limitMan == null) {
131                         // No limit is configured
132                         return null;
133                 }
134                 Limit<RNAalifold> limit = limitMan.getLimitByName(presetName);
135                 return limit;
136         }
137         
138         @Override
139         public LimitsManager<RNAalifold> getLimits() {
140                 return limitMan;
141         }
142         
143         @Override 
144         // PlaceHolder
145         public PresetManager<RNAalifold> getPresets() {
146                 if (rnaalifoldPresets == null) {
147                         // No presets are configured
148                         return null;
149                 }
150                 return rnaalifoldPresets;
151         }
152
153         @Override
154         // PlaceHolder 
155         public ChunkHolder pullExecStatistics(String jobId, long position) {
156
157 //              WSUtil.validateJobId(jobId);
158 //              String file = Configurator.getWorkDirectory(jobId) + File.separator
159 //                              + RNAalifold.getStatFile();
160 //              ChunkHolder cholder = WSUtil.pullFile(file, position);
161 //              return cholder;
162                 return new ChunkHolder("", -1);
163         }
164 }
165         
166