X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws2%2Foperations%2FAnnotationOperation.java;h=b2e3fc6e1c44ab209c77b72ababa001469b65757;hb=987e7e84678221c2ac6f269df5c72a77df281059;hp=b940f3b4deacb64433c8bdf5d2680e09624021c0;hpb=86cd00a0cdc19cdb40b51e704067ec2c331f8e61;p=jalview.git diff --git a/src/jalview/ws2/operations/AnnotationOperation.java b/src/jalview/ws2/operations/AnnotationOperation.java index b940f3b..b2e3fc6 100644 --- a/src/jalview/ws2/operations/AnnotationOperation.java +++ b/src/jalview/ws2/operations/AnnotationOperation.java @@ -1,38 +1,28 @@ package jalview.ws2.operations; -import java.io.IOException; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.concurrent.CancellationException; import java.util.concurrent.CompletionStage; import javax.swing.JMenu; import javax.swing.JMenuItem; -import jalview.bin.Cache; +import jalview.api.AlignmentViewPanel; import jalview.datamodel.AlignmentAnnotation; import jalview.gui.AlignFrame; +import jalview.gui.AlignViewport; import jalview.gui.WsJobParameters; -import jalview.io.AnnotationFile; import jalview.io.FeaturesFile; -import jalview.util.MathUtils; import jalview.util.MessageManager; import jalview.ws.params.ArgumentI; import jalview.ws.params.WsParamSetI; import jalview.ws2.MenuEntryProviderI; import jalview.ws2.ResultSupplier; -import jalview.ws2.WSJob; -import jalview.ws2.WSJobStatus; import jalview.ws2.PollingTaskExecutor; import jalview.ws2.WebServiceI; -import jalview.ws2.WebServiceWorkerI; -import jalview.ws2.utils.WSJobList; - -import static java.lang.String.format; /** - * + * * @author mmwarowny * */ @@ -46,6 +36,10 @@ public class AnnotationOperation implements Operation final ResultSupplier featuresSupplier; + boolean alignmentAnalysis = false; + + boolean interactive = false; + public AnnotationOperation(WebServiceI service, ResultSupplier> annotSupplier, ResultSupplier featSupplier, String operationName) @@ -107,6 +101,34 @@ public class AnnotationOperation implements Operation @Override public boolean isInteractive() { + return interactive; + } + + public void setInteractive(boolean value) + { + this.interactive = value; + } + + @Override + public boolean isAlignmentAnalysis() + { + return alignmentAnalysis; + } + + public void setAlignmentAnalysis(boolean value) + { + this.alignmentAnalysis = value; + } + + @Override + public boolean getFilterNonStandardSymbols() + { + return false; + } + + @Override + public boolean getNeedsAlignedSequences() + { return false; } @@ -120,12 +142,20 @@ public class AnnotationOperation implements Operation { final var calcName = service.getName(); PollingTaskExecutor wsExecutor = frame.getViewport().getWSExecutor(); + final var calcManager = frame.getViewport().getCalcManager(); { var item = new JMenuItem(MessageManager.formatMessage( "label.calcname_with_default_settings", calcName)); item.addActionListener((event) -> { - WebServiceWorkerI worker = new AnnotationWorker(); - wsExecutor.submit(worker); + AlignViewport viewport = frame.getCurrentView(); + AlignmentViewPanel alignPanel = frame.alignPanel; + var worker = new AnnotationServiceWorker(this, service, + Collections.emptyList(), viewport, alignPanel, frame, frame, + calcManager); + if (isInteractive()) + calcManager.registerWorker(worker); + else + calcManager.startWorker(worker); }); parent.add(item); } @@ -140,10 +170,19 @@ public class AnnotationOperation implements Operation .thenAcceptAsync((arguments) -> { if (arguments != null) { - + AlignViewport viewport = frame.getCurrentView(); + AlignmentViewPanel alignPanel = frame.alignPanel; + var worker = new AnnotationServiceWorker( + AnnotationOperation.this, service, arguments, viewport, + alignPanel, frame, frame, calcManager); + if (isInteractive()) + calcManager.registerWorker(worker); + else + calcManager.startWorker(worker); } }); }); + parent.add(item); } } @@ -178,85 +217,4 @@ public class AnnotationOperation implements Operation }); } - private class AnnotationWorker implements WebServiceWorkerI - { - private long uid = MathUtils.getUID(); - - private WSJobList jobs = new WSJobList(); - - private HashMap exceptionCount = new HashMap<>(); - - private static final int MAX_RETRY = 5; - - @Override - public long getUID() - { - return uid; - } - - @Override - public WebServiceI getWebService() - { - return service; - } - - @Override - public List getJobs() - { - return Collections.unmodifiableList(jobs); - } - - @Override - public void start() throws IOException - { - - } - - @Override - public boolean poll() throws IOException - { - boolean done = true; - for (WSJob job : getJobs()) - { - if (!job.getStatus().isDone() && !job.getStatus().isFailed()) - { - Cache.log.debug(format("Polling job %s", job)); - try - { - service.updateProgress(job); - exceptionCount.remove(job.getUid()); - } catch (IOException e) - { - Cache.log.error(format("Polling job %s failed.", job), e); - int count = exceptionCount.getOrDefault(job.getUid(), - MAX_RETRY); - if (--count <= 0) - { - job.setStatus(WSJobStatus.SERVER_ERROR); - Cache.log.warn(format( - "Attempts limit exceeded. Droping job %s.", job)); - } - exceptionCount.put(job.getUid(), count); - } catch (OutOfMemoryError e) - { - job.setStatus(WSJobStatus.BROKEN); - Cache.log.error( - format("Out of memory when retrieving job %s", job), e); - } - Cache.log.debug( - format("Job %s status is %s", job, job.getStatus())); - } - done &= job.getStatus().isDone() || job.getStatus().isFailed(); - } - return done; - } - - @Override - public void done() - { - // TODO Auto-generated method stub - - } - - } }