JAL-3878 update branch from 2.12 merge from 2.11.2 development/JAL-3878_ws_overhaul_3_merged_with_2_12_Merged
authorJim Procter <j.procter@dundee.ac.uk>
Mon, 30 Jan 2023 12:44:29 +0000 (12:44 +0000)
committerJim Procter <j.procter@dundee.ac.uk>
Mon, 30 Jan 2023 12:44:29 +0000 (12:44 +0000)
src/jalview/gui/AlignFrame.java
src/jalview/ws2/actions/AbstractPollableTask.java
src/jalview/ws2/actions/alignment/AlignmentTask.java
src/jalview/ws2/actions/annotation/AnnotationTask.java
src/jalview/ws2/client/api/AbstractWebServiceDiscoverer.java
src/jalview/ws2/client/slivka/SlivkaParamStoreFactory.java
src/jalview/ws2/client/slivka/SlivkaWSClient.java
src/jalview/ws2/client/slivka/SlivkaWSDiscoverer.java
src/jalview/ws2/gui/AlignmentServiceGuiHandler.java
src/jalview/ws2/params/SimpleParamDatastore.java

index 74ac8c0..7ab80ad 100644 (file)
@@ -185,70 +185,6 @@ import jalview.ws.seqfetcher.DbSourceProxy;
 import jalview.ws2.client.api.WebServiceDiscovererI;
 import jalview.ws2.client.slivka.SlivkaWSDiscoverer;
 import jalview.ws2.gui.WebServicesMenuManager;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Rectangle;
-import java.awt.Toolkit;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
-import java.awt.dnd.DropTargetDragEvent;
-import java.awt.dnd.DropTargetDropEvent;
-import java.awt.dnd.DropTargetEvent;
-import java.awt.dnd.DropTargetListener;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-import java.awt.print.PageFormat;
-import java.awt.print.PrinterJob;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Deque;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.ButtonGroup;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JComponent;
-import javax.swing.JEditorPane;
-import javax.swing.JInternalFrame;
-import javax.swing.JLabel;
-import javax.swing.JLayeredPane;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.SwingUtilities;
-import javax.swing.event.InternalFrameAdapter;
-import javax.swing.event.InternalFrameEvent;
-
-import ext.vamsas.ServiceHandle;
 
 /**
  * DOCUMENT ME!
@@ -978,13 +914,22 @@ public class AlignFrame extends GAlignFrame
     buildWebServicesMenu();
   }
 
+  private WebServiceDiscovererI.ServicesChangeListener slivkaServiceChangeListener =
+      (discoverer, services) -> {
+        // run when slivka services change
+        var menu = AlignFrame.this.slivkaMenu;
+        menu.setServices(discoverer);
+        menu.setInProgress(discoverer.isRunning());
+        menu.setNoServices(services.isEmpty() && discoverer.isDone());
+      };
+
   /* Set up intrinsic listeners for dynamically generated GUI bits. */
   private void addServiceListeners()
   {
     if (Cache.getDefault("SHOW_SLIVKA_SERVICES", true))
     {
-      WSDiscovererI discoverer = SlivkaWSDiscoverer.getInstance();
-      discoverer.addServiceChangeListener(this);
+      WebServiceDiscovererI discoverer = SlivkaWSDiscoverer.getInstance();
+      discoverer.addServicesChangeListener(slivkaServiceChangeListener);
     }
     if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
     {
@@ -1001,7 +946,7 @@ public class AlignFrame extends GAlignFrame
       @Override
       public void internalFrameClosed(InternalFrameEvent e) {
         System.out.println("deregistering discoverer listener");
-        SlivkaWSDiscoverer.getInstance().removeServiceChangeListener(AlignFrame.this);
+        SlivkaWSDiscoverer.getInstance().removeServicesChangeListener(slivkaServiceChangeListener);
         Jws2Discoverer.getInstance().removeServiceChangeListener(AlignFrame.this);
         Desktop.getInstance().removeJalviewPropertyChangeListener("services", legacyListener);
         closeMenuItem_actionPerformed(true);
@@ -1130,6 +1075,12 @@ public class AlignFrame extends GAlignFrame
   }
   
   @Override
+  public void addProgressBar(long id, String message)
+  {
+    progressBar.addProgressBar(id, message);
+  }
+
+  @Override
   public void removeProgressBar(long id)
   {
     progressBar.removeProgressBar(id);
index fc3c554..e692c68 100644 (file)
@@ -10,6 +10,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.util.ArrayUtils;
 import jalview.util.MathUtils;
 import jalview.ws.params.ArgumentI;
@@ -330,7 +331,7 @@ public abstract class AbstractPollableTask<T extends BaseJob, R> implements Task
           job.setStatus(JobStatus.CANCELLED);
         } catch (IOException e)
         {
-          Cache.log.error(format("failed to cancel job %s", job.getServerJob()), e);
+          Console.error(format("failed to cancel job %s", job.getServerJob()), e);
         }
       }
     }
index 96e9a12..6a0c4dd 100644 (file)
@@ -15,6 +15,7 @@ import jalview.analysis.SeqsetUtils;
 import jalview.analysis.SeqsetUtils.SequenceInfo;
 import jalview.api.AlignViewportI;
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.datamodel.AlignedCodonFrame;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
@@ -81,7 +82,7 @@ class AlignmentTask extends AbstractPollableTask<AlignmentJob, AlignmentResult>
   @Override
   protected List<AlignmentJob> prepare() throws ServiceInputInvalidException
   { 
-    Cache.log.info(format("starting alignment service %s:%s",
+    Console.info(format("starting alignment service %s:%s",
         client.getClientName(), action.getName()));
     SequenceI[][] conmsa = msa.getVisibleContigs(gapChar);
     if (conmsa == null)
index 9d16400..165e132 100644 (file)
@@ -14,6 +14,7 @@ import jalview.api.AlignViewportI;
 import jalview.api.FeatureColourI;
 import jalview.api.PollableAlignCalcWorkerI;
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AnnotatedCollectionI;
@@ -298,7 +299,7 @@ public class AnnotationTask implements TaskI<AnnotationResult>
   {
     if (this.taskStatus != status)
     {
-      Cache.log.debug(String.format("%s status change to %s", this, status.name()));
+      Console.debug(String.format("%s status change to %s", this, status.name()));
       this.taskStatus = status;
       eventHandler.fireTaskStatusChanged(status);
     }
@@ -573,7 +574,7 @@ public class AnnotationTask implements TaskI<AnnotationResult>
           job.setStatus(JobStatus.CANCELLED);
         } catch (IOException e)
         {
-          Cache.log.error(String.format(
+          Console.error(String.format(
               "failed to cancel job %s", job.getServerJob()), e);
         }
       }
index 6a81410..76907d3 100644 (file)
@@ -11,6 +11,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.ws2.actions.api.ActionI;
 import jalview.ws2.api.WebService;
 
@@ -60,12 +61,12 @@ public abstract class AbstractWebServiceDiscoverer implements WebServiceDiscover
         valid.add(new URL(url));
       } catch (MalformedURLException e)
       {
-        Cache.log.warn(String.format(
+        Console.warn(String.format(
             "Problem whilst trying to make a URL from '%s'. " +
                 "This was probably due to malformed comma-separated-list " +
                 "in the %s entry of ${HOME}/.jalview-properties",
             Objects.toString(url, "<null>"), key));
-        Cache.log.debug("Exception occurred while reading url list", e);
+        Console.debug("Exception occurred while reading url list", e);
       }
     }
     return valid;
@@ -133,7 +134,7 @@ public abstract class AbstractWebServiceDiscoverer implements WebServiceDiscover
   @Override
   public synchronized final CompletableFuture<List<WebService<?>>> startDiscoverer()
   {
-    Cache.log.debug("Requesting service discovery");
+    Console.debug("Requesting service discovery");
     while (true)
     {
       if (state.get() == AGAIN)
@@ -142,23 +143,23 @@ public abstract class AbstractWebServiceDiscoverer implements WebServiceDiscover
       }
       if (state.compareAndSet(END, BEGIN) || state.compareAndSet(BEGIN, AGAIN))
       {
-        Cache.log.debug("State changed to " + state.get());
+        Console.debug("State changed to " + state.get());
         final var oldTask = discoveryTask;
         CompletableFuture<List<WebService<?>>> task = oldTask
             .handleAsync((_r, _e) -> {
-              Cache.log.info("Reloading services for " + this);
+              Console.info("Reloading services for " + this);
               fireServicesChanged(services = Collections.emptyList());
               var allServices = new ArrayList<WebService<?>>();
               for (var url : getUrls())
               {
-                Cache.log.info("Fetching list of services from " + url);
+                Console.info("Fetching list of services from " + url);
                 try
                 {
                   allServices.addAll(fetchServices(url));
                 }
                 catch (IOException e)
                 {
-                  Cache.log.error("Failed to get services from " + url, e);
+                  Console.error("Failed to get services from " + url, e);
                 }
               }
               return services = allServices;
@@ -170,15 +171,15 @@ public abstract class AbstractWebServiceDiscoverer implements WebServiceDiscover
               // should never happen, throw exception to break the loop just in case
               throw new AssertionError();
             if (state.compareAndSet(BEGIN, END) || state.compareAndSet(AGAIN, BEGIN))
-              Cache.log.debug("Discovery ended, state is " + state.get());
+              Console.debug("Discovery ended, state is " + state.get());
               break;
           }
           if (services != null)
             fireServicesChanged(services);
           return null;
         });
-        Cache.log.debug("Spawned task " + task);
-        Cache.log.debug("Killing task " + oldTask);
+        Console.debug("Spawned task " + task);
+        Console.debug("Killing task " + oldTask);
         oldTask.cancel(false);
         return discoveryTask = task;
       }
@@ -199,7 +200,7 @@ public abstract class AbstractWebServiceDiscoverer implements WebServiceDiscover
       }
       catch (Exception e)
       {
-        Cache.log.warn(e);
+        Console.warn("Services Changed event raised an exception",e);
       }
     }
   }
index 05e6f0c..a848798 100644 (file)
@@ -13,6 +13,7 @@ import java.util.Map;
 import com.stevesoft.pat.NotImplementedError;
 
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.ws.params.ArgumentI;
 import jalview.ws.params.ParamDatastoreI;
 import jalview.ws.params.ParamManager;
@@ -46,7 +47,7 @@ class SlivkaParamStoreFactory
       url = service.getUrl().toURL();
     } catch (MalformedURLException e)
     {
-      Cache.log.warn("Invalid service url " + service.getUrl(), e);
+      Console.warn("Invalid service url " + service.getUrl(), e);
     }
     List<WsParamSetI> presets = new ArrayList<>(service.getPresets().size());
     for (var preset : service.getPresets())
@@ -222,7 +223,7 @@ class SlivkaParamStoreFactory
       builder.setDetailsUrl(service.getUrl().toURL());
     } catch (MalformedURLException e)
     {
-      Cache.log.warn("invalid service url " + service.getUrl(), e);
+      Console.warn("invalid service url " + service.getUrl(), e);
     }
   }
 }
\ No newline at end of file
index d7841af..47e43c1 100644 (file)
@@ -15,6 +15,7 @@ import java.util.regex.Pattern;
 
 import jalview.api.FeatureColourI;
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
@@ -94,7 +95,7 @@ public class SlivkaWSClient implements WebServiceClientI
         }
         if (format == null)
         {
-          Cache.log.warn(String.format(
+          Console.warn(String.format(
               "Unknown input format %s, assuming fasta.",
               fileParam.getMediaType()));
           format = FileFormat.Fasta;
@@ -200,7 +201,7 @@ public class SlivkaWSClient implements WebServiceClientI
   public void cancel(WebServiceJobHandle job)
       throws IOException, UnsupportedOperationException
   {
-    Cache.log.warn(
+    Console.warn(
         "slivka client does not support job cancellation");
   }
 }
@@ -235,7 +236,7 @@ class SlivkaAlignmentWSClient extends SlivkaWSClient
       return new FormatAdapter().readFile(f.getContentUrl().toString(),
           DataSourceType.URL, format);
     }
-    Cache.log.warn("No alignment found on the server");
+    Console.warn("No alignment found on the server");
     throw new IOException("no alignment found");
   }
 
@@ -270,7 +271,7 @@ class SlivkaAnnotationWSClient extends SlivkaWSClient
             aln, service.getId(), f.getContentUrl().toString(),
             DataSourceType.URL);
         if (annotPresent)
-          Cache.log.debug(format("loaded annotations for %s", service.getId()));
+          Console.debug(format("loaded annotations for %s", service.getId()));
       }
       else if (fmt.equalsIgnoreCase("jalview-features"))
       {
@@ -278,13 +279,13 @@ class SlivkaAnnotationWSClient extends SlivkaWSClient
             DataSourceType.URL);
         featPresent = ff.parse(aln, colours, true);
         if (featPresent)
-          Cache.log.debug(format("loaded features for %s", service.getId()));
+          Console.debug(format("loaded features for %s", service.getId()));
       }
     }
     if (!annotPresent)
-      Cache.log.debug(format("no annotations found for %s", service.getId()));
+      Console.debug(format("no annotations found for %s", service.getId()));
     if (!featPresent)
-      Cache.log.debug(format("no features found for %s", service.getId()));
+      Console.debug(format("no features found for %s", service.getId()));
     return aln.getAlignmentAnnotation() != null ? Arrays.asList(aln.getAlignmentAnnotation())
         : Collections.emptyList();
   }
index 58f6d67..70e1c94 100644 (file)
@@ -8,6 +8,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.ws.params.ParamManager;
 import jalview.ws2.actions.alignment.AlignmentAction;
 import jalview.ws2.actions.annotation.AnnotationAction;
@@ -61,7 +62,7 @@ public class SlivkaWSDiscoverer extends AbstractWebServiceDiscoverer
       return services.isEmpty() ? STATUS_NO_SERVICES : STATUS_OK;
     } catch (IOException e)
     {
-      Cache.log.error("slivka could not retrieve services from " + url, e);
+      Console.error("slivka could not retrieve services from " + url, e);
       return STATUS_INVALID;
     }
   }
index b484ccc..59683a7 100644 (file)
@@ -14,6 +14,7 @@ import javax.swing.JInternalFrame;
 import javax.swing.SwingUtilities;
 
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentOrder;
@@ -226,7 +227,7 @@ class AlignmentServiceGuiHandler
   @Override
   public void taskException(TaskI<AlignmentResult> source, Exception e)
   {
-    Cache.log.error(String.format("Service %s raised an exception.", service.getName()), e);
+    Console.error(String.format("Service %s raised an exception.", service.getName()), e);
     infoPanel.appendProgressText(e.getMessage());
   }
 
index 259bdca..c2123e8 100644 (file)
@@ -14,6 +14,7 @@ import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.util.MessageManager;
 import jalview.ws.params.ArgumentI;
 import jalview.ws.params.ParamDatastoreI;
@@ -80,7 +81,7 @@ public class SimpleParamDatastore implements ParamDatastoreI
         else
         {
           userPresets.add(new SimpleParamSet(paramSet));
-          Cache.log.warn(String.format(
+          Console.warn(String.format(
               "Parameter set instance type %s is not applicable to service"
               + "at %s.", paramSet.getClass(), serviceUrl));
         }
@@ -161,7 +162,7 @@ public class SimpleParamDatastore implements ParamDatastoreI
     }
     else
     {
-      Cache.log.warn("Implementation error: no preset to delete");
+      Console.warn("Implementation error: no preset to delete");
     }
   }