X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=webservices%2Fcompbio%2Fws%2Fserver%2FAAConWS.java;h=1625ded6d360d93d7eb1634a7d8ad88d7678691d;hb=99ab39d360a99ec101152070146b63773a1d6453;hp=cf382df632fe821d0fb7f3cbab7bef245bc848b8;hpb=fab6bab770b548a0c99ed6f5dfb46f5aa99f67c7;p=jabaws.git diff --git a/webservices/compbio/ws/server/AAConWS.java b/webservices/compbio/ws/server/AAConWS.java index cf382df..1625ded 100644 --- a/webservices/compbio/ws/server/AAConWS.java +++ b/webservices/compbio/ws/server/AAConWS.java @@ -1,6 +1,7 @@ package compbio.ws.server; import java.io.File; +import java.util.Arrays; import java.util.List; import javax.annotation.Resource; @@ -9,14 +10,13 @@ import javax.xml.ws.WebServiceContext; import org.apache.log4j.Logger; -import compbio.conservation.Method; -import compbio.data.msa.Annotation; +import compbio.data.msa.SequenceAnnotation; import compbio.data.sequence.FastaSequence; -import compbio.data.sequence.JalviewAnnotation; -import compbio.data.sequence.MultiAnnotatedSequence; +import compbio.data.sequence.ScoreManager; import compbio.engine.AsyncExecutor; import compbio.engine.Configurator; import compbio.engine.client.ConfiguredExecutable; +import compbio.engine.client.SkeletalExecutable; import compbio.metadata.ChunkHolder; import compbio.metadata.JobStatus; import compbio.metadata.JobSubmissionException; @@ -33,8 +33,8 @@ import compbio.metadata.WrongParameterException; import compbio.runner.Util; import compbio.runner.conservation.AACon; -@WebService(endpointInterface = "compbio.data.msa.MsaWS", targetNamespace = "http://msa.data.compbio/01/01/2010/", serviceName = "MuscleWS") -public class AAConWS implements Annotation { +@WebService(endpointInterface = "compbio.data.msa.SequenceAnnotation", targetNamespace = "http://msa.data.compbio/01/12/2010/", serviceName = "AAConWS") +public class AAConWS implements SequenceAnnotation { // Ask for resource injection @Resource @@ -50,42 +50,50 @@ public class AAConWS implements Annotation { private static final PresetManager aaconPresets = Util .getPresets(AACon.class); + private static final LimitsManager limitMan = compbio.engine.client.Util + .getLimits(new AACon().getType()); + ConfiguredExecutable init(List sequences) throws JobSubmissionException { AACon aacon = new AACon(); - aacon.setInput("fasta.in").setOutput("fasta.out"); + aacon.setInput(SkeletalExecutable.INPUT).setOutput( + SkeletalExecutable.OUTPUT); return Configurator.configureExecutable(aacon, sequences); } - @SuppressWarnings("unchecked") - public MultiAnnotatedSequence getResult(String jobId) + @Override + public ScoreManager getAnnotation(String jobId) throws ResultNotAvailableException { WSUtil.validateJobId(jobId); AsyncExecutor asyncEngine = Configurator.getAsyncEngine(jobId); ConfiguredExecutable aacon = (ConfiguredExecutable) asyncEngine .getResults(jobId); - MultiAnnotatedSequence mas = aacon.getResults(); - // log(jobId, "getResults"); + ScoreManager mas = aacon.getResults(); + log.trace(jobId + " getConservation : " + mas); return mas; } + /* + * @SuppressWarnings("unchecked") public JalviewAnnotation + * getJalviewAnnotation(String jobId) throws ResultNotAvailableException { + * MultiAnnotatedSequence result = getResult(jobId); // TODO // + * log(jobId, "getResults"); return result.toJalviewAnnotation(); } + */ - @SuppressWarnings("unchecked") - public JalviewAnnotation getJalviewAnnotation(String jobId) - throws ResultNotAvailableException { - MultiAnnotatedSequence result = getResult(jobId); - - // log(jobId, "getResults"); - return result.toJalviewAnnotation(); - } - + @Override public Limit getLimit(String presetName) { - return new AACon().getLimit(presetName); + if (limitMan == null) { + // Limit is not defined + return null; + } + return limitMan.getLimitByName(presetName); } + @Override public LimitsManager getLimits() { - return new AACon().getLimits(); + return limitMan; } + @Override public ChunkHolder pullExecStatistics(String jobId, long position) { WSUtil.validateJobId(jobId); String file = Configurator.getWorkDirectory(jobId) + File.separator @@ -93,30 +101,54 @@ public class AAConWS implements Annotation { return WSUtil.pullFile(file, position); } + @Override public boolean cancelJob(String jobId) { WSUtil.validateJobId(jobId); return WSUtil.cancelJob(jobId); } + @Override public JobStatus getJobStatus(String jobId) { WSUtil.validateJobId(jobId); return WSUtil.getJobStatus(jobId); } + @Override public PresetManager getPresets() { return aaconPresets; } + @Override public RunnerConfig getRunnerOptions() { return aaconOptions; } + private String analize(List sequences, + ConfiguredExecutable confExec, Logger log, String method, + Limit limit) throws JobSubmissionException { + if (limit != null && limit.isExceeded(sequences)) { + throw LimitExceededException.newLimitExceeded(limit, sequences); + } + + compbio.runner.Util.writeInput(sequences, confExec); + AsyncExecutor engine = Configurator.getAsyncEngine(confExec); + String jobId = engine.submitJob(confExec); + return jobId; + } + @Override public String analize(List sequences) throws UnsupportedRuntimeException, LimitExceededException, JobSubmissionException { - // TODO Auto-generated method stub - return null; + + WSUtil.validateAAConInput(sequences); + ConfiguredExecutable confAAcon = init(sequences); + + // set default conservation method to fastest - SHENKIN + // TODO: This violates encapsulation, should be moved to the runners + // level. + confAAcon.addParameters(Arrays.asList("-m=SHENKIN")); + return analize(sequences, confAAcon, null, "analize", getLimit("")); } @Override @@ -124,8 +156,16 @@ public class AAConWS implements Annotation { List> options) throws UnsupportedRuntimeException, LimitExceededException, JobSubmissionException, WrongParameterException { - // TODO Auto-generated method stub - return null; + WSUtil.validateAAConInput(sequences); + ConfiguredExecutable confAACon = init(sequences); + // Could not do that! Space separated values + // will all be treated as keys! thus duplicates removed + // String params = cbuilder.getCommand(); + List params = WSUtil.getCommands(options, + AACon.KEY_VALUE_SEPARATOR); + confAACon.addParameters(params); + return analize(sequences, confAACon, null, "customAnalize", + getLimit("")); } @Override @@ -133,8 +173,14 @@ public class AAConWS implements Annotation { Preset preset) throws UnsupportedRuntimeException, LimitExceededException, JobSubmissionException, WrongParameterException { - // TODO Auto-generated method stub - return null; + WSUtil.validateAAConInput(sequences); + if (preset == null) { + throw new WrongParameterException("Preset must be provided!"); + } + ConfiguredExecutable confAAcon = init(sequences); + confAAcon.addParameters(preset.getOptions()); + Limit limit = getLimit(preset.getName()); + return WSUtil.align(sequences, confAAcon, null, "presetAnalize", limit); } }