1 package compbio.ws.server;
6 import javax.jws.WebParam;
7 import javax.jws.WebService;
9 import org.apache.log4j.Logger;
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;
36 @WebService(endpointInterface = "compbio.data.msa.FoldWS", targetNamespace = JABAService.SERVICE_NAMESPACE, serviceName = "RNAalifoldWS")
37 public class RNAalifoldWS implements FoldWS<RNAalifold> {
39 private static Logger log = Logger.getLogger(ClustalWS.class);
41 private static final RunnerConfig<RNAalifold> rnaalifoldOptions = Util.
42 getSupportedOptions(RNAalifold.class);
44 private static final PresetManager<RNAalifold> rnaalifoldPresets = Util
45 .getPresets(RNAalifold.class);
47 private static final LimitsManager<RNAalifold> limitMan = compbio.engine.client.Util
48 .getLimits(new RNAalifold().getType());
52 public String fold(Alignment alignment)
53 throws JobSubmissionException {
55 // Validate clustal input here?
56 ConfiguredExecutable<RNAalifold> confRNAalifold = init(alignment);
57 return WSUtil.fold(alignment, confRNAalifold, log, "fold", getLimit(""));
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;
72 public String presetFold(Alignment alignment,
73 Preset<RNAalifold> preset) throws JobSubmissionException,
74 WrongParameterException {
77 throw new WrongParameterException("Preset must be Provided!");
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);
86 public String customFold(Alignment alignment,
87 List<Option<RNAalifold>> options) throws JobSubmissionException,
88 WrongParameterException {
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",
100 public RunnerConfig<RNAalifold> getRunnerOptions() {
101 return rnaalifoldOptions;
104 @SuppressWarnings("unchecked")
105 public String getResult(String jobId) throws ResultNotAvailableException {
107 WSUtil.validateJobId(jobId);
108 AsyncExecutor asyncEngine = Configurator.getAsyncEngine(jobId);
109 ConfiguredExecutable<RNAalifold> rnaalifold = (ConfiguredExecutable<RNAalifold>) asyncEngine
111 return rnaalifold.getResults();
115 public boolean cancelJob(String jobId) {
116 WSUtil.validateJobId(jobId);
117 boolean result = WSUtil.cancelJob(jobId);
122 public JobStatus getJobStatus(String jobId) {
123 WSUtil.validateJobId(jobId);
124 JobStatus status = WSUtil.getJobStatus(jobId);
129 public Limit<RNAalifold> getLimit(String presetName) {
130 if (limitMan == null) {
131 // No limit is configured
134 Limit<RNAalifold> limit = limitMan.getLimitByName(presetName);
139 public LimitsManager<RNAalifold> getLimits() {
145 public PresetManager<RNAalifold> getPresets() {
146 if (rnaalifoldPresets == null) {
147 // No presets are configured
150 return rnaalifoldPresets;
155 public ChunkHolder pullExecStatistics(String jobId, long position) {
157 // WSUtil.validateJobId(jobId);
158 // String file = Configurator.getWorkDirectory(jobId) + File.separator
159 // + RNAalifold.getStatFile();
160 // ChunkHolder cholder = WSUtil.pullFile(file, position);
162 return new ChunkHolder("", -1);