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
\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
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
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
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
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
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