X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws2%2Foperations%2FAnnotationOperation.java;fp=src%2Fjalview%2Fws2%2Foperations%2FAnnotationOperation.java;h=1eb5da0800c0cb75f3aa8ad2ee592b76c79b9e0f;hb=7385bc1418b68162cc670cc35f89033f34db2e86;hp=b940f3b4deacb64433c8bdf5d2680e09624021c0;hpb=743dffc0b47bcc06ea8241ee4e36f1a16ace7cf3;p=jalview.git diff --git a/src/jalview/ws2/operations/AnnotationOperation.java b/src/jalview/ws2/operations/AnnotationOperation.java index b940f3b..1eb5da0 100644 --- a/src/jalview/ws2/operations/AnnotationOperation.java +++ b/src/jalview/ws2/operations/AnnotationOperation.java @@ -10,14 +10,17 @@ import java.util.concurrent.CompletionStage; import javax.swing.JMenu; import javax.swing.JMenuItem; +import jalview.api.AlignmentViewPanel; import jalview.bin.Cache; 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.workers.AlignCalcManager2; import jalview.ws.params.ArgumentI; import jalview.ws.params.WsParamSetI; import jalview.ws2.MenuEntryProviderI; @@ -111,6 +114,24 @@ public class AnnotationOperation implements Operation } @Override + public boolean isAlignmentAnalysis() + { + return false; + } + + @Override + public boolean getFilterNonStandardSymbols() + { + return false; + } + + @Override + public boolean getNeedsAlignedSequences() + { + return false; + } + + @Override public MenuEntryProviderI getMenuBuilder() { return this::buildMenu; @@ -120,12 +141,18 @@ 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); + calcManager.startWorker(worker); + // TODO create and submit AnnotataionServiceWorker }); parent.add(item); } @@ -140,7 +167,12 @@ 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); + calcManager.startWorker(worker); } }); }); @@ -178,85 +210,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 - - } - - } }