1c378c72cd3382b7a7671f7631bef7a5eed464c0
[jabaws.git] / webservices / compbio / ws / server / GenericMetadataService.java
1 package compbio.ws.server;\r
2 \r
3 import java.util.List;\r
4 \r
5 import org.apache.log4j.Logger;\r
6 \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
20 \r
21 public abstract class GenericMetadataService<T> {\r
22 \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
27         final Logger log;\r
28 \r
29         /*\r
30          * FIXME - instances of the Runner (?) and their types should be defined in\r
31          * Executable IF\r
32          */\r
33         GenericMetadataService(SkeletalExecutable<T> exec, Logger log) {\r
34                 assert log != null;\r
35                 assert exec != null;\r
36                 this.log = log;\r
37                 this.exec = exec;\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
41                                                 .getType());\r
42                 this.aaconPresets = Util\r
43                                 .getPresets((Class<? extends Executable<T>>) exec.getType());\r
44         }\r
45 \r
46         ConfiguredExecutable<T> init(List<FastaSequence> sequences)\r
47                         throws JobSubmissionException {\r
48                 // FIXME\r
49                 try {\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
57                 }\r
58                 exec.setInput(SkeletalExecutable.INPUT)\r
59                                 .setOutput(SkeletalExecutable.OUTPUT)\r
60                                 .setError(SkeletalExecutable.ERROR);\r
61                 return Configurator.configureExecutable(exec, sequences);\r
62         }\r
63 \r
64         public boolean cancelJob(String jobId) {\r
65                 WSUtil.validateJobId(jobId);\r
66                 return WSUtil.cancelJob(jobId);\r
67         }\r
68 \r
69         public JobStatus getJobStatus(String jobId) {\r
70                 WSUtil.validateJobId(jobId);\r
71                 return WSUtil.getJobStatus(jobId);\r
72         }\r
73 \r
74         public Limit<T> getLimit(String presetName) {\r
75                 if (limitMan == null) {\r
76                         // Limit is not defined\r
77                         return null;\r
78                 }\r
79                 return limitMan.getLimitByName(presetName);\r
80         }\r
81 \r
82         public LimitsManager<T> getLimits() {\r
83                 return limitMan;\r
84         }\r
85 \r
86         public PresetManager<T> getPresets() {\r
87                 return aaconPresets;\r
88         }\r
89 \r
90         public RunnerConfig<T> getRunnerOptions() {\r
91                 return aaconOptions;\r
92         }\r
93 \r
94         /**\r
95          * Assume statistics is not supported\r
96          * \r
97          * @param jobId\r
98          * @param position\r
99          * @return\r
100          */\r
101         public ChunkHolder pullExecStatistics(String jobId, long position) {\r
102                 // Execution stat is not supported\r
103                 return new ChunkHolder("", -1);\r
104         }\r
105 \r
106 }\r