JAL-3851 Some streamlining of caching/removing from cache. 'Highlighting' in InputAli...
[jalview.git] / src / jalview / rest / AbstractEndpointAsync.java
index fe10d1d..bfd7be4 100644 (file)
@@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import jalview.bin.Console;
+import jalview.gui.AlignFrame;
 import jalview.rest.RestHandler.Status;
 
 public abstract class AbstractEndpointAsync extends AbstractEndpoint
@@ -32,6 +33,20 @@ public abstract class AbstractEndpointAsync extends AbstractEndpoint
 
   private Status tempStatus = null;
 
+  protected void removeFromCaches(HttpServletRequest request)
+  {
+    removeFromCaches(getId(request));
+  }
+
+  protected void removeFromCaches(String id)
+  {
+    CompletableFuture cf = cfMap.get(id);
+    if (cf == null || cf.isDone())
+      cfMap.remove(id);
+    AlignFrame.removeFromAlignFrameCache(id);
+    API.getStatusMap().remove(getId());
+  }
+
   protected void setCompletableFuture(CompletableFuture<Void> cf)
   {
     this.cf = cf;
@@ -104,8 +119,26 @@ public abstract class AbstractEndpointAsync extends AbstractEndpoint
     // subclass method
     initialise(request, response);
 
+    Console.debug("**** STATUS=" + getStatus());
     if (checkStatus(request, response, Status.STARTED))
     {
+      /*
+      // double check alignframe
+      Console.debug("**** STATUS2=" + getStatus());
+      if (getStatus().compareTo(Status.IN_PROGRESS) > 0
+              && getAlignFrameUsingId(request) == null)
+      {
+        Console.debug("**** STATUS3=" + getStatus());
+        // delete key from cache
+        Console.debug("Cannot find cached AlignFrame for '" + getId()
+                + "', deleting key from cache");
+        removeFromCaches(getId());
+        this.changeStatus(null);
+        this.setCompletableFuture(null);
+      }
+      else
+      {
+      */
       String alreadyFinishedString = null;
       if (getStatus() == Status.FINISHED)
       {
@@ -113,6 +146,9 @@ public abstract class AbstractEndpointAsync extends AbstractEndpoint
       }
       returnStatus(request, response, alreadyFinishedString);
       return;
+      /*
+      }
+      */
     }
 
     if (getCompletableFuture() == null)