Change the way to deal with Limits to simplify wrapper writing and enable couping...
[jabaws.git] / webservices / compbio / ws / server / AAConWS.java
index cf382df..8637af1 100644 (file)
@@ -1,6 +1,8 @@
 package compbio.ws.server;\r
 \r
 import java.io.File;\r
+import java.util.Arrays;\r
+import java.util.HashSet;\r
 import java.util.List;\r
 \r
 import javax.annotation.Resource;\r
@@ -9,11 +11,10 @@ import javax.xml.ws.WebServiceContext;
 \r
 import org.apache.log4j.Logger;\r
 \r
-import compbio.conservation.Method;\r
-import compbio.data.msa.Annotation;\r
+import compbio.data.msa.SequenceAnnotation;\r
 import compbio.data.sequence.FastaSequence;\r
-import compbio.data.sequence.JalviewAnnotation;\r
-import compbio.data.sequence.MultiAnnotatedSequence;\r
+import compbio.data.sequence.Score;\r
+import compbio.data.sequence.ScoreManager;\r
 import compbio.engine.AsyncExecutor;\r
 import compbio.engine.Configurator;\r
 import compbio.engine.client.ConfiguredExecutable;\r
@@ -33,8 +34,8 @@ import compbio.metadata.WrongParameterException;
 import compbio.runner.Util;\r
 import compbio.runner.conservation.AACon;\r
 \r
-@WebService(endpointInterface = "compbio.data.msa.MsaWS", targetNamespace = "http://msa.data.compbio/01/01/2010/", serviceName = "MuscleWS")\r
-public class AAConWS implements Annotation<AACon> {\r
+@WebService(endpointInterface = "compbio.data.msa.SequenceAnnotation", targetNamespace = "http://msa.data.compbio/01/12/2010/", serviceName = "AAConWS")\r
+public class AAConWS implements SequenceAnnotation<AACon> {\r
 \r
        // Ask for resource injection\r
        @Resource\r
@@ -50,42 +51,52 @@ public class AAConWS implements Annotation<AACon> {
        private static final PresetManager<AACon> aaconPresets = Util\r
                        .getPresets(AACon.class);\r
 \r
+       private static final LimitsManager<AACon> limitMan = compbio.runner.Util\r
+                       .getLimits(new AACon().getType());\r
+\r
        ConfiguredExecutable<AACon> init(List<FastaSequence> sequences)\r
                        throws JobSubmissionException {\r
                AACon aacon = new AACon();\r
-               aacon.setInput("fasta.in").setOutput("fasta.out");\r
+               aacon.setInput("fasta.in").setOutput("aacon.out");\r
                return Configurator.configureExecutable(aacon, sequences);\r
        }\r
 \r
-       @SuppressWarnings("unchecked")\r
-       public MultiAnnotatedSequence<Method> getResult(String jobId)\r
+       @Override\r
+       public ScoreManager getAnnotation(String jobId)\r
                        throws ResultNotAvailableException {\r
                WSUtil.validateJobId(jobId);\r
                AsyncExecutor asyncEngine = Configurator.getAsyncEngine(jobId);\r
                ConfiguredExecutable<AACon> aacon = (ConfiguredExecutable<AACon>) asyncEngine\r
                                .getResults(jobId);\r
-               MultiAnnotatedSequence<Method> mas = aacon.getResults();\r
-               // log(jobId, "getResults");\r
-               return mas;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       public JalviewAnnotation getJalviewAnnotation(String jobId)\r
-                       throws ResultNotAvailableException {\r
-               MultiAnnotatedSequence<Method> result = getResult(jobId);\r
-\r
-               // log(jobId, "getResults");\r
-               return result.toJalviewAnnotation();\r
+               HashSet<Score> mas = aacon.getResults();\r
+               // ScoreManager result = new HashMap<String, HashSet<Score>>();\r
+               // result.put("Alignment", mas);\r
+               log.trace(jobId + " getConservation : " + mas);\r
+               // FIXME\r
+               return null;\r
        }\r
+       /*\r
+        * @SuppressWarnings("unchecked") public JalviewAnnotation\r
+        * getJalviewAnnotation(String jobId) throws ResultNotAvailableException {\r
+        * MultiAnnotatedSequence<Method> result = getResult(jobId); // TODO //\r
+        * log(jobId, "getResults"); return result.toJalviewAnnotation(); }\r
+        */\r
 \r
+       @Override\r
        public Limit<AACon> getLimit(String presetName) {\r
-               return new AACon().getLimit(presetName);\r
+               if (limitMan == null) {\r
+                       // Limit is not defined\r
+                       return null;\r
+               }\r
+               return limitMan.getLimitByName(presetName);\r
        }\r
 \r
+       @Override\r
        public LimitsManager<AACon> getLimits() {\r
-               return new AACon().getLimits();\r
+               return limitMan;\r
        }\r
 \r
+       @Override\r
        public ChunkHolder pullExecStatistics(String jobId, long position) {\r
                WSUtil.validateJobId(jobId);\r
                String file = Configurator.getWorkDirectory(jobId) + File.separator\r
@@ -93,30 +104,53 @@ public class AAConWS implements Annotation<AACon> {
                return WSUtil.pullFile(file, position);\r
        }\r
 \r
+       @Override\r
        public boolean cancelJob(String jobId) {\r
                WSUtil.validateJobId(jobId);\r
                return WSUtil.cancelJob(jobId);\r
        }\r
 \r
+       @Override\r
        public JobStatus getJobStatus(String jobId) {\r
                WSUtil.validateJobId(jobId);\r
                return WSUtil.getJobStatus(jobId);\r
        }\r
 \r
+       @Override\r
        public PresetManager<AACon> getPresets() {\r
                return aaconPresets;\r
        }\r
 \r
+       @Override\r
        public RunnerConfig<AACon> getRunnerOptions() {\r
                return aaconOptions;\r
        }\r
 \r
+       String analize(List<FastaSequence> sequences,\r
+                       ConfiguredExecutable<AACon> confExec, Logger log, String method,\r
+                       Limit<AACon> limit) throws JobSubmissionException {\r
+               if (limit != null && limit.isExceeded(sequences)) {\r
+                       throw LimitExceededException.newLimitExceeded(limit, sequences);\r
+               }\r
+\r
+               compbio.runner.Util.writeInput(sequences, confExec);\r
+               AsyncExecutor engine = Configurator.getAsyncEngine(confExec);\r
+               String jobId = engine.submitJob(confExec);\r
+               return jobId;\r
+       }\r
+\r
        @Override\r
        public String analize(List<FastaSequence> sequences)\r
                        throws UnsupportedRuntimeException, LimitExceededException,\r
                        JobSubmissionException {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
+               WSUtil.validateFastaInput(sequences);\r
+               ConfiguredExecutable<AACon> confAAcon = init(sequences);\r
+\r
+               // set default conservation method to fastest - SHENKIN\r
+               // TODO: This violates encapsulation, should be moved to the runners\r
+               // level.\r
+               confAAcon.addParameters(Arrays.asList("-m=SHENKIN"));\r
+               return analize(sequences, confAAcon, null, "analize", getLimit(""));\r
        }\r
 \r
        @Override\r
@@ -124,8 +158,16 @@ public class AAConWS implements Annotation<AACon> {
                        List<Option<AACon>> options) throws UnsupportedRuntimeException,\r
                        LimitExceededException, JobSubmissionException,\r
                        WrongParameterException {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
+               WSUtil.validateFastaInput(sequences);\r
+               ConfiguredExecutable<AACon> 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 analize(sequences, confAACon, null, "customAnalize",\r
+                               getLimit(""));\r
        }\r
 \r
        @Override\r
@@ -133,8 +175,14 @@ public class AAConWS implements Annotation<AACon> {
                        Preset<AACon> preset) throws UnsupportedRuntimeException,\r
                        LimitExceededException, JobSubmissionException,\r
                        WrongParameterException {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
+               WSUtil.validateFastaInput(sequences);\r
+               if (preset == null) {\r
+                       throw new WrongParameterException("Preset must be provided!");\r
+               }\r
+               ConfiguredExecutable<AACon> confAAcon = init(sequences);\r
+               confAAcon.addParameters(preset.getOptions());\r
+               Limit<AACon> limit = getLimit(preset.getName());\r
+               return WSUtil.align(sequences, confAAcon, null, "presetAnalize", limit);\r
        }\r
 \r
 }\r