Jalview-JS/JAL-3253-applet adding more applet parameters and setting
[jalview.git] / src / jalview / gui / Desktop.java
index c835248..bc892cf 100644 (file)
@@ -22,8 +22,10 @@ package jalview.gui;
 
 import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
+import jalview.api.StructureSelectionManagerProvider;
+import jalview.bin.ApplicationSingletonProvider;
+import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI;
 import jalview.bin.Cache;
-import jalview.bin.Instance;
 import jalview.bin.Jalview;
 import jalview.gui.ImageExporter.ImageWriterI;
 import jalview.io.BackupFiles;
@@ -37,6 +39,7 @@ import jalview.io.FormatAdapter;
 import jalview.io.IdentifyFile;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
+import jalview.jbgui.GDesktop;
 import jalview.jbgui.GSplitFrame;
 import jalview.jbgui.GStructureViewer;
 import jalview.project.Jalview2XML;
@@ -135,10 +138,11 @@ import org.stackoverflowusers.file.WindowsShortcut;
  * @version $Revision: 1.155 $
  */
 @SuppressWarnings("serial")
-public class Desktop extends jalview.jbgui.GDesktop
+public class Desktop extends GDesktop
         implements DropTargetListener, ClipboardOwner, IProgressIndicator,
-        jalview.api.StructureSelectionManagerProvider
+        StructureSelectionManagerProvider, ApplicationSingletonI
 {
+
   private final static int DEFAULT_MIN_WIDTH = 300;
 
   private final static int DEFAULT_MIN_HEIGHT = 250;
@@ -195,7 +199,13 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public static MyDesktopPane getDesktopPane()
   {
-    return Instance.getDesktop().desktopPane;
+    return Desktop.getInstance().desktopPane;
+  }
+
+  public StructureSelectionManager getStructureSelectionManager()
+  {
+    return StructureSelectionManager
+            .getStructureSelectionManager(this);
   }
 
   static int openFrameCount = 0;
@@ -344,26 +354,46 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public MyDesktopPane desktopPane;
 
+  /**
+   * Answers an 'application scope' singleton instance of this class. Separate
+   * SwingJS 'applets' running in the same browser page will each have a
+   * distinct instance of Desktop.
+   * 
+   * @return
+   */
+  public static Desktop getInstance()
+  {
+    return (Desktop) ApplicationSingletonProvider
+            .getInstance(Desktop.class);
+  }
+
+  /**
+   * For testing.
+   * 
+   * @param forInstance
+   */
   public Desktop(boolean forInstance)
   {
     instanceOnly = true;
   }
+  
   /**
-   * Creates a new Desktop object.
+   * Private constructor enforces singleton pattern. It is called by reflection
+   * from ApplicationSingletonProvider.getInstance().
    */
-  public Desktop()
+  @SuppressWarnings("unused")
+  private Desktop()
   {
     /**
      * A note to implementors. It is ESSENTIAL that any activities that might
      * block are spawned off as threads rather than waited for during this
      * constructor.
      */
-    Instance.setDesktop(this);
     if (!Platform.isJS())
     {
       doVamsasClientCheck();
     }
-
+    
     doConfigureStructurePrefs();
     setTitle("Jalview " + jalview.bin.Cache.getProperty("VERSION"));
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
@@ -372,7 +402,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     boolean showjconsole = jalview.bin.Cache.getDefault("SHOW_JAVA_CONSOLE",
             false);
     desktopPane = new MyDesktopPane(selmemusage);
-
+    
     showMemusage.setSelected(selmemusage);
     desktopPane.setBackground(Color.white);
     getContentPane().setLayout(new BorderLayout());
@@ -380,16 +410,16 @@ public class Desktop extends jalview.jbgui.GDesktop
     // JScrollPane sp = new JScrollPane();
     // sp.getViewport().setView(desktop);
     // getContentPane().add(sp, BorderLayout.CENTER);
-
+    
     // BH 2018 - just an experiment to try unclipped JInternalFrames.
     if (Platform.isJS())
     {
       getRootPane().putClientProperty("swingjs.overflow.hidden", "false");
     }
-
+    
     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
     desktopPane.setDesktopManager(new MyDesktopManager(
@@ -398,7 +428,7 @@ public class Desktop extends jalview.jbgui.GDesktop
                             ? new AquaInternalFrameManager(
                                     desktopPane.getDesktopManager())
                             : desktopPane.getDesktopManager())));
-
+    
     Rectangle dims = getLastKnownDimensions("");
     if (dims != null)
     {
@@ -411,7 +441,7 @@ public class Desktop extends jalview.jbgui.GDesktop
       int yPos = Math.max(5, (screenSize.height - 650) / 2);
       setBounds(xPos, yPos, 900, 650);
     }
-
+    
     if (!Platform.isJS())
     /**
      * Java only
@@ -419,7 +449,7 @@ public class Desktop extends jalview.jbgui.GDesktop
      * @j2sIgnore
      */
     {
-
+    
       jconsole = new Console(this, showjconsole);
       // add essential build information
       jconsole.setHeader("Jalview Version: "
@@ -432,19 +462,19 @@ public class Desktop extends jalview.jbgui.GDesktop
               + System.getProperty("os.arch") + " "
               + System.getProperty("os.name") + " "
               + System.getProperty("os.version"));
-
+    
       showConsole(showjconsole);
-
+    
       showNews.setVisible(false);
-
+    
       experimentalFeatures.setSelected(showExperimental());
-
+    
       getIdentifiersOrgData();
-
+    
       checkURLLinks();
-
+    
       // Spawn a thread that shows the splashscreen
-
+    
       SwingUtilities.invokeLater(new Runnable()
       {
         @Override
@@ -453,7 +483,7 @@ public class Desktop extends jalview.jbgui.GDesktop
           new SplashScreen();
         }
       });
-
+    
       // Thread off a new instance of the file chooser - this reduces the time
       // it
       // takes to open it later on.
@@ -473,7 +503,7 @@ public class Desktop extends jalview.jbgui.GDesktop
       changeSupport.addJalviewPropertyChangeListener("services",
               new PropertyChangeListener()
               {
-
+    
                 @Override
                 public void propertyChange(PropertyChangeEvent evt)
                 {
@@ -481,13 +511,13 @@ public class Desktop extends jalview.jbgui.GDesktop
                           + evt.getNewValue());
                   JalviewServicesChanged(evt);
                 }
-
+    
               });
-
+    
     }
-
+    
     this.setDropTarget(new java.awt.dnd.DropTarget(desktopPane, this));
-
+    
     this.addWindowListener(new WindowAdapter()
     {
       @Override
@@ -496,7 +526,7 @@ public class Desktop extends jalview.jbgui.GDesktop
         quit();
       }
     });
-
+    
     MouseAdapter ma;
     this.addMouseListener(ma = new MouseAdapter()
     {
@@ -508,7 +538,7 @@ public class Desktop extends jalview.jbgui.GDesktop
           showPasteMenu(evt.getX(), evt.getY());
         }
       }
-
+    
       @Override
       public void mouseReleased(MouseEvent evt)
       {
@@ -519,7 +549,6 @@ public class Desktop extends jalview.jbgui.GDesktop
       }
     });
     desktopPane.addMouseListener(ma);
-
   }
 
   /**
@@ -538,8 +567,7 @@ public class Desktop extends jalview.jbgui.GDesktop
   public void doConfigureStructurePrefs()
   {
     // configure services
-    StructureSelectionManager ssm = StructureSelectionManager
-            .getStructureSelectionManager(this);
+    StructureSelectionManager ssm = getStructureSelectionManager();
     if (jalview.bin.Cache.getDefault(Preferences.ADD_SS_ANN, true))
     {
       ssm.setAddTempFacAnnot(jalview.bin.Cache
@@ -595,7 +623,7 @@ public class Desktop extends jalview.jbgui.GDesktop
         }
       }
     }).start();
-    ;
+    
   }
 
   @Override
@@ -757,7 +785,7 @@ public class Desktop extends jalview.jbgui.GDesktop
         FileFormatI format = new IdentifyFile().identify(file,
                 DataSourceType.PASTE);
 
-        new FileLoader().LoadFile(file, DataSourceType.PASTE, format);
+        new FileLoader().loadFile(file, DataSourceType.PASTE, format);
 
       }
     } catch (Exception ex)
@@ -866,7 +894,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     // A HEADLESS STATE WHEN NO DESKTOP EXISTS. MUST RETURN
     // IF JALVIEW IS RUNNING HEADLESS
     // ///////////////////////////////////////////////
-    if (Instance.getDesktop().instanceOnly || Jalview.isHeadlessMode())
+    if (Desktop.getInstance().instanceOnly || Jalview.isHeadlessMode())
     {
       return;
     }
@@ -944,8 +972,8 @@ public class Desktop extends jalview.jbgui.GDesktop
         {
           menuItem.removeActionListener(menuItem.getActionListeners()[0]);
         }
-        Instance.getDesktop().windowMenu.remove(menuItem);
-      };
+        Desktop.getInstance().windowMenu.remove(menuItem);
+      }
     });
 
     menuItem.addActionListener(new ActionListener()
@@ -968,7 +996,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
     getDesktopPane().add(frame);
 
-    Instance.getDesktop().windowMenu.add(menuItem);
+    Desktop.getInstance().windowMenu.add(menuItem);
 
     frame.toFront();
     try
@@ -1025,7 +1053,7 @@ public class Desktop extends jalview.jbgui.GDesktop
   {
     if (!internalCopy)
     {
-      Instance.getDesktop().jalviewClipboard = null;
+      Desktop.getInstance().jalviewClipboard = null;
     }
 
     internalCopy = false;
@@ -1104,7 +1132,7 @@ public class Desktop extends jalview.jbgui.GDesktop
           {
             Platform.cacheFileData((File) file);
           }
-          new FileLoader().LoadFile(null, file, protocol, format);
+          new FileLoader().loadFile(null, file, protocol, format);
 
         }
       } catch (Exception ex)
@@ -1161,7 +1189,7 @@ public class Desktop extends jalview.jbgui.GDesktop
           }
         }
 
-        new FileLoader().LoadFile(viewport, selectedFile,
+        new FileLoader().loadFile(viewport, selectedFile,
                 DataSourceType.FILE, format);
       }
     });
@@ -1235,12 +1263,12 @@ public class Desktop extends jalview.jbgui.GDesktop
         {
           if (viewport != null)
           {
-            new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
+            new FileLoader().loadFile(viewport, url, DataSourceType.URL,
                     FileFormat.Jalview);
           }
           else
           {
-            new FileLoader().LoadFile(url, DataSourceType.URL,
+            new FileLoader().loadFile(url, DataSourceType.URL,
                     FileFormat.Jalview);
           }
         }
@@ -1270,12 +1298,12 @@ public class Desktop extends jalview.jbgui.GDesktop
 
           if (viewport != null)
           {
-            new FileLoader().LoadFile(viewport, url, DataSourceType.URL,
+            new FileLoader().loadFile(viewport, url, DataSourceType.URL,
                     format);
           }
           else
           {
-            new FileLoader().LoadFile(url, DataSourceType.URL, format);
+            new FileLoader().loadFile(url, DataSourceType.URL, format);
           }
         }
       }
@@ -1504,12 +1532,7 @@ public class Desktop extends jalview.jbgui.GDesktop
      * reset state of singleton objects as appropriate (clear down session state
      * when all windows are closed)
      */
-    StructureSelectionManager ssm = StructureSelectionManager
-            .getStructureSelectionManager(this);
-    if (ssm != null)
-    {
-      ssm.resetAll();
-    }
+    getStructureSelectionManager().resetAll();
   }
 
   @Override
@@ -2352,7 +2375,7 @@ public class Desktop extends jalview.jbgui.GDesktop
                 });
                 rthr.start();
               }
-            };
+            }
           });
           VamsasStMenu.add(sessit);
         }
@@ -3013,7 +3036,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
     if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
     {
-      t2 = jalview.ws.jws2.Jws2Discoverer.getDiscoverer()
+      t2 = jalview.ws.jws2.Jws2Discoverer.getInstance()
               .startDiscoverer(changeSupport);
     }
     Thread t3 = null;
@@ -3046,7 +3069,7 @@ public class Desktop extends jalview.jbgui.GDesktop
   {
     if (evt.getNewValue() == null || evt.getNewValue() instanceof Vector)
     {
-      final String ermsg = jalview.ws.jws2.Jws2Discoverer.getDiscoverer()
+      final String ermsg = jalview.ws.jws2.Jws2Discoverer.getInstance()
               .getErrorMessages();
       if (ermsg != null)
       {
@@ -3122,7 +3145,7 @@ public class Desktop extends jalview.jbgui.GDesktop
    */
   public static void showUrl(final String url)
   {
-    showUrl(url, Instance.getDesktop());
+    showUrl(url, Desktop.getInstance());
   }
 
   /**
@@ -3171,7 +3194,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public static ParamManager getUserParameterStore()
   {
-    Desktop d = Instance.getDesktop();
+    Desktop d = Desktop.getInstance();
     if (d.wsparamManager == null)
     {
       d.wsparamManager = new WsParamSetManager();
@@ -3252,7 +3275,6 @@ public class Desktop extends jalview.jbgui.GDesktop
           } catch (InterruptedException x)
           {
           }
-          ;
         }
         if (instanceOnly)
         {
@@ -3463,7 +3485,7 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public static groovy.ui.Console getGroovyConsole()
   {
-    return Instance.getDesktop().groovyConsole;
+    return Desktop.getInstance().groovyConsole;
   }
 
   /**
@@ -3541,7 +3563,6 @@ public class Desktop extends jalview.jbgui.GDesktop
             System.err.println(
                     "Please ignore plist error - occurs due to problem with java 8 on OSX");
           }
-          ;
         }
       } catch (Throwable ex)
       {