Web services refactoring & bug fixing
[jabaws.git] / webservices / compbio / ws / server / SequenceAnnotationService.java
diff --git a/webservices/compbio/ws/server/SequenceAnnotationService.java b/webservices/compbio/ws/server/SequenceAnnotationService.java
new file mode 100644 (file)
index 0000000..973951e
--- /dev/null
@@ -0,0 +1,85 @@
+package compbio.ws.server;\r
+\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import compbio.data.sequence.FastaSequence;\r
+import compbio.data.sequence.ScoreManager;\r
+import compbio.engine.client.ConfiguredExecutable;\r
+import compbio.engine.client.SkeletalExecutable;\r
+import compbio.metadata.JobSubmissionException;\r
+import compbio.metadata.Limit;\r
+import compbio.metadata.LimitExceededException;\r
+import compbio.metadata.Option;\r
+import compbio.metadata.Preset;\r
+import compbio.metadata.ResultNotAvailableException;\r
+import compbio.metadata.UnsupportedRuntimeException;\r
+import compbio.metadata.WrongParameterException;\r
+import compbio.runner.conservation.AACon;\r
+\r
+/**\r
+ * Common methods for all SequenceAnnotation web services\r
+ * \r
+ * @author pvtroshin\r
+ * \r
+ * @param <T>\r
+ * \r
+ * @version 1.0 June 2011\r
+ * @since 2.0\r
+ */\r
+public abstract class SequenceAnnotationService<T> extends GenericMetadataService {\r
+\r
+       /*\r
+        * FIXME - instances of the Runner (?) and their types should be defined in\r
+        * Executable IF\r
+        */\r
+       SequenceAnnotationService(SkeletalExecutable<T> exec, Logger log) {\r
+               super(exec, log);\r
+       }\r
+\r
+       public ScoreManager getAnnotation(String jobId)\r
+                       throws ResultNotAvailableException {\r
+               return WSUtil.getAnnotation(jobId, log);\r
+       }\r
+\r
+       public String analize(List<FastaSequence> sequences)\r
+                       throws UnsupportedRuntimeException, LimitExceededException,\r
+                       JobSubmissionException {\r
+               WSUtil.validateFastaInput(sequences);\r
+               ConfiguredExecutable<T> confIUPred = init(sequences);\r
+               return WSUtil.analize(sequences, confIUPred, log, "analize",\r
+                               getLimit(""));\r
+       }\r
+\r
+       public String customAnalize(List<FastaSequence> sequences,\r
+                       List<Option<T>> options) throws UnsupportedRuntimeException,\r
+                       LimitExceededException, JobSubmissionException,\r
+                       WrongParameterException {\r
+               WSUtil.validateAAConInput(sequences);\r
+               ConfiguredExecutable<T> confAACon = init(sequences);\r
+               // Could not do that! Space separated values\r
+               // will all be treated as keys! thus duplicates removed\r
+               // String params = cbuilder.getCommand();\r
+               List<String> params = WSUtil.getCommands(options,\r
+                               AACon.KEY_VALUE_SEPARATOR);\r
+               confAACon.addParameters(params);\r
+               return WSUtil.analize(sequences, confAACon, log, "customAnalize",\r
+                               getLimit(""));\r
+       }\r
+\r
+       public String presetAnalize(List<FastaSequence> sequences, Preset<T> preset)\r
+                       throws UnsupportedRuntimeException, LimitExceededException,\r
+                       JobSubmissionException, WrongParameterException {\r
+               WSUtil.validateAAConInput(sequences);\r
+               if (preset == null) {\r
+                       throw new WrongParameterException("Preset must be provided!");\r
+               }\r
+               ConfiguredExecutable<T> confAAcon = init(sequences);\r
+               confAAcon.addParameters(preset.getOptions());\r
+               Limit<T> limit = getLimit(preset.getName());\r
+               return WSUtil\r
+                               .analize(sequences, confAAcon, log, "presetAnalize", limit);\r
+       }\r
+\r
+}\r