1 package compbio.ws.server;
\r
3 import java.util.List;
\r
5 import org.apache.log4j.Logger;
\r
7 import compbio.data.sequence.FastaSequence;
\r
8 import compbio.engine.Configurator;
\r
9 import compbio.engine.client.ConfiguredExecutable;
\r
10 import compbio.engine.client.Executable;
\r
11 import compbio.engine.client.SkeletalExecutable;
\r
12 import compbio.metadata.ChunkHolder;
\r
13 import compbio.metadata.JobStatus;
\r
14 import compbio.metadata.JobSubmissionException;
\r
15 import compbio.metadata.Limit;
\r
16 import compbio.metadata.LimitsManager;
\r
17 import compbio.metadata.PresetManager;
\r
18 import compbio.metadata.RunnerConfig;
\r
19 import compbio.runner.Util;
\r
21 public abstract class GenericMetadataService<T> {
\r
23 private final RunnerConfig<T> aaconOptions;
\r
24 private final PresetManager<T> aaconPresets;
\r
25 private final LimitsManager<T> limitMan;
\r
26 private SkeletalExecutable<T> exec;
\r
30 * FIXME - instances of the Runner (?) and their types should be defined in
\r
33 GenericMetadataService(SkeletalExecutable<T> exec, Logger log) {
\r
35 assert exec != null;
\r
38 this.limitMan = compbio.engine.client.Util.getLimits(exec.getType());
\r
39 this.aaconOptions = Util
\r
40 .getSupportedOptions((Class<? extends Executable<T>>) exec
\r
42 this.aaconPresets = Util
\r
43 .getPresets((Class<? extends Executable<T>>) exec.getType());
\r
46 ConfiguredExecutable<T> init(List<FastaSequence> sequences)
\r
47 throws JobSubmissionException {
\r
50 exec = (SkeletalExecutable<T>) exec.getType().newInstance();
\r
51 } catch (InstantiationException e) {
\r
52 log.error(e.getLocalizedMessage(), e);
\r
53 throw new JobSubmissionException(e.getLocalizedMessage(), e);
\r
54 } catch (IllegalAccessException e) {
\r
55 log.error(e.getLocalizedMessage(), e);
\r
56 throw new JobSubmissionException(e.getLocalizedMessage(), e);
\r
58 exec.setInput(SkeletalExecutable.INPUT)
\r
59 .setOutput(SkeletalExecutable.OUTPUT)
\r
60 .setError(SkeletalExecutable.ERROR);
\r
61 return Configurator.configureExecutable(exec, sequences);
\r
64 public boolean cancelJob(String jobId) {
\r
65 WSUtil.validateJobId(jobId);
\r
66 return WSUtil.cancelJob(jobId);
\r
69 public JobStatus getJobStatus(String jobId) {
\r
70 WSUtil.validateJobId(jobId);
\r
71 return WSUtil.getJobStatus(jobId);
\r
74 public Limit<T> getLimit(String presetName) {
\r
75 if (limitMan == null) {
\r
76 // Limit is not defined
\r
79 return limitMan.getLimitByName(presetName);
\r
82 public LimitsManager<T> getLimits() {
\r
86 public PresetManager<T> getPresets() {
\r
87 return aaconPresets;
\r
90 public RunnerConfig<T> getRunnerOptions() {
\r
91 return aaconOptions;
\r
95 * Assume statistics is not supported
\r
101 public ChunkHolder pullExecStatistics(String jobId, long position) {
\r
102 // Execution stat is not supported
\r
103 return new ChunkHolder("", -1);
\r