JAL-3253 jalview.bin.Instance handles all singleton instances -
[jalview.git] / src / jalview / gui / Desktop.java
index c76c396..c835248 100644 (file)
@@ -23,6 +23,7 @@ package jalview.gui;
 import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
 import jalview.bin.Cache;
+import jalview.bin.Instance;
 import jalview.bin.Jalview;
 import jalview.gui.ImageExporter.ImageWriterI;
 import jalview.io.BackupFiles;
@@ -47,6 +48,7 @@ import jalview.util.MessageManager;
 import jalview.util.Platform;
 import jalview.util.UrlConstants;
 import jalview.viewmodel.AlignmentViewport;
+import jalview.ws.jws1.Discoverer;
 import jalview.ws.params.ParamManager;
 import jalview.ws.utils.UrlDownloadClient;
 
@@ -191,51 +193,9 @@ public class Desktop extends jalview.jbgui.GDesktop
             listener);
   }
 
-  /**
-   * Singleton Desktop instance only in Java;
-   */
-  private static Desktop instance;
-
-  public static Desktop getInstance()
-  {
-    if (instance == null)
-    {
-      new Desktop(true);
-    }
-    Desktop d;
-    @SuppressWarnings("unused")
-    ThreadGroup g = Thread.currentThread().getThreadGroup();
-    /**
-     * @j2sNative d = g._jalviewDesktopInstance;
-     */
-    {
-      d = instance;
-    }
-    return d;
-  }
-
-  private static void setInstance(Desktop d)
-  {
-    @SuppressWarnings("unused")
-    ThreadGroup g = Thread.currentThread().getThreadGroup();
-    /**
-     * @j2sNative g._jalviewDesktopInstance = d;
-     */
-    {
-      instance = d;
-    }
-  }
-
-  private MyDesktopPane desktopPane;
-
   public static MyDesktopPane getDesktopPane()
   {
-    return getInstance().desktopPane;
-  }
-
-  private void setDesktopPane(MyDesktopPane pane)
-  {
-    getInstance().desktopPane = pane;
+    return Instance.getDesktop().desktopPane;
   }
 
   static int openFrameCount = 0;
@@ -244,7 +204,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   static final int yOffset = 30;
 
-  public jalview.ws.jws1.Discoverer discoverer;
+  public Discoverer discoverer;
 
   public Object[] jalviewClipboard;
 
@@ -254,6 +214,9 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public JInternalFrame conservationSlider, PIDSlider;
 
+  /**
+   * just an instance (for testng, probably); no actual frames
+   */
   private boolean instanceOnly;
 
   class MyDesktopManager implements DesktopManager
@@ -275,7 +238,7 @@ public class Desktop extends jalview.jbgui.GDesktop
       } catch (NullPointerException npe)
       {
         Point p = getMousePosition();
-        getInstance().showPasteMenu(p.x, p.y);
+        showPasteMenu(p.x, p.y);
       }
     }
 
@@ -323,14 +286,14 @@ public class Desktop extends jalview.jbgui.GDesktop
     public void endDraggingFrame(JComponent f)
     {
       delegate.endDraggingFrame(f);
-      getDesktopPane().repaint();
+      desktopPane.repaint();
     }
 
     @Override
     public void endResizingFrame(JComponent f)
     {
       delegate.endResizingFrame(f);
-      getDesktopPane().repaint();
+      desktopPane.repaint();
     }
 
     @Override
@@ -379,10 +342,11 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   }
 
+  public MyDesktopPane desktopPane;
+
   public Desktop(boolean forInstance)
   {
     instanceOnly = true;
-    setInstance(this);
   }
   /**
    * Creates a new Desktop object.
@@ -394,7 +358,7 @@ public class Desktop extends jalview.jbgui.GDesktop
      * block are spawned off as threads rather than waited for during this
      * constructor.
      */
-    setInstance(this);
+    Instance.setDesktop(this);
     if (!Platform.isJS())
     {
       doVamsasClientCheck();
@@ -407,10 +371,10 @@ public class Desktop extends jalview.jbgui.GDesktop
             false);
     boolean showjconsole = jalview.bin.Cache.getDefault("SHOW_JAVA_CONSOLE",
             false);
-    setDesktopPane(new MyDesktopPane(selmemusage));
+    desktopPane = new MyDesktopPane(selmemusage);
 
     showMemusage.setSelected(selmemusage);
-    getDesktopPane().setBackground(Color.white);
+    desktopPane.setBackground(Color.white);
     getContentPane().setLayout(new BorderLayout());
     // alternate config - have scrollbars - see notes in JAL-153
     // JScrollPane sp = new JScrollPane();
@@ -423,17 +387,17 @@ public class Desktop extends jalview.jbgui.GDesktop
       getRootPane().putClientProperty("swingjs.overflow.hidden", "false");
     }
 
-    getContentPane().add(getDesktopPane(), BorderLayout.CENTER);
-    getDesktopPane().setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
+    getContentPane().add(desktopPane, BorderLayout.CENTER);
+    desktopPane.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
 
     // This line prevents Windows Look&Feel resizing all new windows to maximum
     // if previous window was maximised
-    getDesktopPane().setDesktopManager(new MyDesktopManager(
+    desktopPane.setDesktopManager(new MyDesktopManager(
             (Platform.isWindowsAndNotJS() ? new DefaultDesktopManager()
                     : Platform.isAMacAndNotJS()
                             ? new AquaInternalFrameManager(
-                                    getDesktopPane().getDesktopManager())
-                            : getDesktopPane().getDesktopManager())));
+                                    desktopPane.getDesktopManager())
+                            : desktopPane.getDesktopManager())));
 
     Rectangle dims = getLastKnownDimensions("");
     if (dims != null)
@@ -522,7 +486,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
     }
 
-    this.setDropTarget(new java.awt.dnd.DropTarget(getDesktopPane(), this));
+    this.setDropTarget(new java.awt.dnd.DropTarget(desktopPane, this));
 
     this.addWindowListener(new WindowAdapter()
     {
@@ -554,7 +518,7 @@ public class Desktop extends jalview.jbgui.GDesktop
         }
       }
     });
-    getDesktopPane().addMouseListener(ma);
+    desktopPane.addMouseListener(ma);
 
   }
 
@@ -652,10 +616,10 @@ public class Desktop extends jalview.jbgui.GDesktop
         public void run()
         {
           long now = System.currentTimeMillis();
-          Desktop.getInstance().setProgressBar(
+          setProgressBar(
                   MessageManager.getString("status.refreshing_news"), now);
           jvnews.refreshNews();
-          Desktop.getInstance().setProgressBar(null, now);
+          setProgressBar(null, now);
           jvnews.showNews();
         }
       }).start();
@@ -902,7 +866,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     // A HEADLESS STATE WHEN NO DESKTOP EXISTS. MUST RETURN
     // IF JALVIEW IS RUNNING HEADLESS
     // ///////////////////////////////////////////////
-    if (getInstance().instanceOnly || Jalview.isHeadlessMode())
+    if (Instance.getDesktop().instanceOnly || Jalview.isHeadlessMode())
     {
       return;
     }
@@ -980,7 +944,7 @@ public class Desktop extends jalview.jbgui.GDesktop
         {
           menuItem.removeActionListener(menuItem.getActionListeners()[0]);
         }
-        getInstance().windowMenu.remove(menuItem);
+        Instance.getDesktop().windowMenu.remove(menuItem);
       };
     });
 
@@ -1004,7 +968,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
     getDesktopPane().add(frame);
 
-    getInstance().windowMenu.add(menuItem);
+    Instance.getDesktop().windowMenu.add(menuItem);
 
     frame.toFront();
     try
@@ -1061,7 +1025,7 @@ public class Desktop extends jalview.jbgui.GDesktop
   {
     if (!internalCopy)
     {
-      Desktop.getInstance().jalviewClipboard = null;
+      Instance.getDesktop().jalviewClipboard = null;
     }
 
     internalCopy = false;
@@ -1514,12 +1478,12 @@ public class Desktop extends jalview.jbgui.GDesktop
   @Override
   public void closeAll_actionPerformed(ActionEvent e)
   {
-    if (getDesktopPane() == null)
+    if (desktopPane == null)
     {
       return;
     }
     // TODO show a progress bar while closing?
-    JInternalFrame[] frames = getDesktopPane().getAllFrames();
+    JInternalFrame[] frames = desktopPane.getAllFrames();
     for (int i = 0; i < frames.length; i++)
     {
       try
@@ -1904,7 +1868,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     {
       progressPanel = new JPanel(new GridLayout(1, 1));
       totalProgressCount = 0;
-      getInstance().getContentPane().add(progressPanel, BorderLayout.SOUTH);
+      getContentPane().add(progressPanel, BorderLayout.SOUTH);
     }
     JPanel thisprogress = new JPanel(new BorderLayout(10, 5));
     JProgressBar progressBar = new JProgressBar();
@@ -1917,7 +1881,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     ((GridLayout) progressPanel.getLayout()).setRows(
             ((GridLayout) progressPanel.getLayout()).getRows() + 1);
     ++totalProgressCount;
-    getInstance().validate();
+    validate();
     return thisprogress;
   }
 
@@ -2099,7 +2063,7 @@ public class Desktop extends jalview.jbgui.GDesktop
   {
     source.viewport.setGatherViewsHere(true);
     source.viewport.setExplodedGeometry(source.getBounds());
-    JInternalFrame[] frames = getDesktopPane().getAllFrames();
+    JInternalFrame[] frames = getAllFrames();
     String viewId = source.viewport.getSequenceSetId();
 
     for (int t = 0; t < frames.length; t++)
@@ -2494,7 +2458,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public JInternalFrame[] getAllFrames()
   {
-    return getDesktopPane().getAllFrames();
+    return desktopPane.getAllFrames();
   }
 
   /**
@@ -2580,7 +2544,7 @@ public class Desktop extends jalview.jbgui.GDesktop
           });
           msgPanel.add(jcb);
 
-          JvOptionPane.showMessageDialog(Desktop.getDesktopPane(), msgPanel,
+          JvOptionPane.showMessageDialog(desktopPane, msgPanel,
                   MessageManager
                           .getString("label.SEQUENCE_ID_no_longer_used"),
                   JvOptionPane.WARNING_MESSAGE);
@@ -2780,7 +2744,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     } catch (Exception ex)
     {
       jalview.bin.Cache.log.error("Groovy Shell Creation failed.", ex);
-      JvOptionPane.showInternalMessageDialog(Desktop.getDesktopPane(),
+      JvOptionPane.showInternalMessageDialog(desktopPane,
 
               MessageManager.getString("label.couldnt_create_groovy_shell"),
               MessageManager.getString("label.groovy_support_failed"),
@@ -3038,7 +3002,7 @@ public class Desktop extends jalview.jbgui.GDesktop
       // todo: changesupport handlers need to be transferred
       if (discoverer == null)
       {
-        discoverer = new jalview.ws.jws1.Discoverer();
+        discoverer = Discoverer.getInstance();
         // register PCS handler for getDesktop().
         discoverer.addPropertyChangeListener(changeSupport);
       }
@@ -3158,7 +3122,7 @@ public class Desktop extends jalview.jbgui.GDesktop
    */
   public static void showUrl(final String url)
   {
-    showUrl(url, Desktop.getInstance());
+    showUrl(url, Instance.getDesktop());
   }
 
   /**
@@ -3207,7 +3171,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public static ParamManager getUserParameterStore()
   {
-    Desktop d = getInstance();
+    Desktop d = Instance.getDesktop();
     if (d.wsparamManager == null)
     {
       d.wsparamManager = new WsParamSetManager();
@@ -3454,7 +3418,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     String topViewId = myTopFrame.viewport.getSequenceSetId();
     String bottomViewId = myBottomFrame.viewport.getSequenceSetId();
 
-    JInternalFrame[] frames = getDesktopPane().getAllFrames();
+    JInternalFrame[] frames = desktopPane.getAllFrames();
     for (JInternalFrame frame : frames)
     {
       if (frame instanceof SplitFrame && frame != source)
@@ -3499,7 +3463,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public static groovy.ui.Console getGroovyConsole()
   {
-    return getInstance().groovyConsole;
+    return Instance.getDesktop().groovyConsole;
   }
 
   /**
@@ -3752,7 +3716,7 @@ public class Desktop extends jalview.jbgui.GDesktop
           Class<? extends StructureViewerBase> structureViewerClass)
   {
     List<StructureViewerBase> result = new ArrayList<>();
-    JInternalFrame[] frames = Desktop.getInstance().getAllFrames();
+    JInternalFrame[] frames = getAllFrames();
 
     for (JInternalFrame frame : frames)
     {