Adding registry web service and changes to WStester and JWS2Client code. Bugs in...
[jabaws.git] / webservices / compbio / ws / server / DisemblWS.java
1 package compbio.ws.server;\r
2 \r
3 import java.util.List;\r
4 \r
5 import javax.annotation.Resource;\r
6 import javax.jws.WebService;\r
7 import javax.xml.ws.WebServiceContext;\r
8 \r
9 import org.apache.log4j.Logger;\r
10 \r
11 import compbio.data.msa.SequenceAnnotation;\r
12 import compbio.data.sequence.FastaSequence;\r
13 import compbio.data.sequence.ScoreManager;\r
14 import compbio.engine.AsyncExecutor;\r
15 import compbio.engine.Configurator;\r
16 import compbio.engine.client.ConfiguredExecutable;\r
17 import compbio.engine.client.SkeletalExecutable;\r
18 import compbio.metadata.ChunkHolder;\r
19 import compbio.metadata.JobStatus;\r
20 import compbio.metadata.JobSubmissionException;\r
21 import compbio.metadata.Limit;\r
22 import compbio.metadata.LimitExceededException;\r
23 import compbio.metadata.LimitsManager;\r
24 import compbio.metadata.Option;\r
25 import compbio.metadata.Preset;\r
26 import compbio.metadata.PresetManager;\r
27 import compbio.metadata.ResultNotAvailableException;\r
28 import compbio.metadata.RunnerConfig;\r
29 import compbio.metadata.UnsupportedRuntimeException;\r
30 import compbio.metadata.WrongParameterException;\r
31 import compbio.runner.Util;\r
32 import compbio.runner.disorder.Disembl;\r
33 \r
34 @WebService(endpointInterface = "compbio.data.msa.SequenceAnnotation", targetNamespace = "http://msa.data.compbio/01/12/2010/", serviceName = "DisemblWS")\r
35 public class DisemblWS implements SequenceAnnotation<Disembl> {\r
36 \r
37         // Ask for resource injection\r
38         @Resource\r
39         WebServiceContext wsContext;\r
40 \r
41         private static Logger statLog = Logger.getLogger("DisemblWS-stats");\r
42 \r
43         private static Logger log = Logger.getLogger(DisemblWS.class);\r
44 \r
45         private static final RunnerConfig<Disembl> disemblOptions = Util\r
46                         .getSupportedOptions(Disembl.class);\r
47 \r
48         private static final PresetManager<Disembl> disemblPresets = Util\r
49                         .getPresets(Disembl.class);\r
50 \r
51         private static final LimitsManager<Disembl> limitMan = compbio.engine.client.Util\r
52                         .getLimits(new Disembl().getType());\r
53 \r
54         ConfiguredExecutable<Disembl> init(List<FastaSequence> sequences)\r
55                         throws JobSubmissionException {\r
56                 Disembl disembl = new Disembl();\r
57                 disembl.setInput(SkeletalExecutable.INPUT);\r
58                 return Configurator.configureExecutable(disembl, sequences);\r
59         }\r
60 \r
61         @Override\r
62         public ScoreManager getAnnotation(String jobId)\r
63                         throws ResultNotAvailableException {\r
64                 WSUtil.validateJobId(jobId);\r
65                 AsyncExecutor asyncEngine = Configurator.getAsyncEngine(jobId);\r
66                 ConfiguredExecutable<Disembl> disembl = (ConfiguredExecutable<Disembl>) asyncEngine\r
67                                 .getResults(jobId);\r
68                 ScoreManager mas = disembl.getResults();\r
69                 log.trace(jobId + " getDisorder : " + mas);\r
70                 return mas;\r
71         }\r
72 \r
73         @Override\r
74         public Limit<Disembl> 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         @Override\r
83         public LimitsManager<Disembl> getLimits() {\r
84                 return limitMan;\r
85         }\r
86 \r
87         @Override\r
88         public ChunkHolder pullExecStatistics(String jobId, long position) {\r
89                 // Execution stat is not supported\r
90                 return new ChunkHolder("", -1);\r
91         }\r
92 \r
93         @Override\r
94         public boolean cancelJob(String jobId) {\r
95                 WSUtil.validateJobId(jobId);\r
96                 return WSUtil.cancelJob(jobId);\r
97         }\r
98 \r
99         @Override\r
100         public JobStatus getJobStatus(String jobId) {\r
101                 WSUtil.validateJobId(jobId);\r
102                 return WSUtil.getJobStatus(jobId);\r
103         }\r
104 \r
105         @Override\r
106         public PresetManager<Disembl> getPresets() {\r
107                 return disemblPresets;\r
108         }\r
109 \r
110         @Override\r
111         public RunnerConfig<Disembl> getRunnerOptions() {\r
112                 return disemblOptions;\r
113         }\r
114 \r
115         String analize(List<FastaSequence> sequences,\r
116                         ConfiguredExecutable<Disembl> confExec, Logger log, String method,\r
117                         Limit<Disembl> limit) throws JobSubmissionException {\r
118                 if (limit != null && limit.isExceeded(sequences)) {\r
119                         throw LimitExceededException.newLimitExceeded(limit, sequences);\r
120                 }\r
121 \r
122                 compbio.runner.Util.writeInput(sequences, confExec);\r
123                 AsyncExecutor engine = Configurator.getAsyncEngine(confExec);\r
124                 String jobId = engine.submitJob(confExec);\r
125                 return jobId;\r
126         }\r
127 \r
128         @Override\r
129         public String analize(List<FastaSequence> sequences)\r
130                         throws UnsupportedRuntimeException, LimitExceededException,\r
131                         JobSubmissionException {\r
132                 WSUtil.validateFastaInput(sequences);\r
133                 ConfiguredExecutable<Disembl> confDisembl = init(sequences);\r
134 \r
135                 return analize(sequences, confDisembl, null, "analize", getLimit(""));\r
136         }\r
137 \r
138         /*\r
139          * No options are supported, thus the result of this call will be as simple\r
140          * call to analize without parameters\r
141          */\r
142         @Override\r
143         public String customAnalize(List<FastaSequence> sequences,\r
144                         List<Option<Disembl>> options) throws UnsupportedRuntimeException,\r
145                         LimitExceededException, JobSubmissionException,\r
146                         WrongParameterException {\r
147                 return analize(sequences);\r
148         }\r
149 \r
150         /*\r
151          * No presets are supported, thus the result of this call will be as simple\r
152          * call to analize without parameters\r
153          */\r
154         @Override\r
155         public String presetAnalize(List<FastaSequence> sequences,\r
156                         Preset<Disembl> preset) throws UnsupportedRuntimeException,\r
157                         LimitExceededException, JobSubmissionException,\r
158                         WrongParameterException {\r
159 \r
160                 return analize(sequences);\r
161         }\r
162 \r
163 }\r