JAL-3878 Refactoring SeqAnnotationServiceCalcWorker.
[jalview.git] / src / jalview / ws2 / operations / AnnotationOperation.java
index b940f3b..1eb5da0 100644 (file)
@@ -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<Long, Integer> 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<WSJob> 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
-
-    }
-
-  }
 }