--- /dev/null
+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