973951eb4d0c752b1806853dbd1ab3b5d806f7f6
[jabaws.git] / webservices / compbio / ws / server / SequenceAnnotationService.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.data.sequence.ScoreManager;\r
9 import compbio.engine.client.ConfiguredExecutable;\r
10 import compbio.engine.client.SkeletalExecutable;\r
11 import compbio.metadata.JobSubmissionException;\r
12 import compbio.metadata.Limit;\r
13 import compbio.metadata.LimitExceededException;\r
14 import compbio.metadata.Option;\r
15 import compbio.metadata.Preset;\r
16 import compbio.metadata.ResultNotAvailableException;\r
17 import compbio.metadata.UnsupportedRuntimeException;\r
18 import compbio.metadata.WrongParameterException;\r
19 import compbio.runner.conservation.AACon;\r
20 \r
21 /**\r
22  * Common methods for all SequenceAnnotation web services\r
23  * \r
24  * @author pvtroshin\r
25  * \r
26  * @param <T>\r
27  * \r
28  * @version 1.0 June 2011\r
29  * @since 2.0\r
30  */\r
31 public abstract class SequenceAnnotationService<T> extends GenericMetadataService {\r
32 \r
33         /*\r
34          * FIXME - instances of the Runner (?) and their types should be defined in\r
35          * Executable IF\r
36          */\r
37         SequenceAnnotationService(SkeletalExecutable<T> exec, Logger log) {\r
38                 super(exec, log);\r
39         }\r
40 \r
41         public ScoreManager getAnnotation(String jobId)\r
42                         throws ResultNotAvailableException {\r
43                 return WSUtil.getAnnotation(jobId, log);\r
44         }\r
45 \r
46         public String analize(List<FastaSequence> sequences)\r
47                         throws UnsupportedRuntimeException, LimitExceededException,\r
48                         JobSubmissionException {\r
49                 WSUtil.validateFastaInput(sequences);\r
50                 ConfiguredExecutable<T> confIUPred = init(sequences);\r
51                 return WSUtil.analize(sequences, confIUPred, log, "analize",\r
52                                 getLimit(""));\r
53         }\r
54 \r
55         public String customAnalize(List<FastaSequence> sequences,\r
56                         List<Option<T>> options) throws UnsupportedRuntimeException,\r
57                         LimitExceededException, JobSubmissionException,\r
58                         WrongParameterException {\r
59                 WSUtil.validateAAConInput(sequences);\r
60                 ConfiguredExecutable<T> confAACon = init(sequences);\r
61                 // Could not do that! Space separated values\r
62                 // will all be treated as keys! thus duplicates removed\r
63                 // String params = cbuilder.getCommand();\r
64                 List<String> params = WSUtil.getCommands(options,\r
65                                 AACon.KEY_VALUE_SEPARATOR);\r
66                 confAACon.addParameters(params);\r
67                 return WSUtil.analize(sequences, confAACon, log, "customAnalize",\r
68                                 getLimit(""));\r
69         }\r
70 \r
71         public String presetAnalize(List<FastaSequence> sequences, Preset<T> preset)\r
72                         throws UnsupportedRuntimeException, LimitExceededException,\r
73                         JobSubmissionException, WrongParameterException {\r
74                 WSUtil.validateAAConInput(sequences);\r
75                 if (preset == null) {\r
76                         throw new WrongParameterException("Preset must be provided!");\r
77                 }\r
78                 ConfiguredExecutable<T> confAAcon = init(sequences);\r
79                 confAAcon.addParameters(preset.getOptions());\r
80                 Limit<T> limit = getLimit(preset.getName());\r
81                 return WSUtil\r
82                                 .analize(sequences, confAAcon, log, "presetAnalize", limit);\r
83         }\r
84 \r
85 }\r