Merge branch 'develop' into task/JAL-4001_migrate_googleanalytics_to_GA4
authorBen Soares <b.soares@dundee.ac.uk>
Thu, 8 Jun 2023 07:16:06 +0000 (08:16 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Thu, 8 Jun 2023 07:16:06 +0000 (08:16 +0100)
1  2 
src/jalview/bin/Jalview.java
src/jalview/gui/Desktop.java

@@@ -91,6 -91,7 +91,7 @@@ import jalview.io.FileLoader
  import jalview.io.HtmlSvgOutput;
  import jalview.io.IdentifyFile;
  import jalview.io.NewickFile;
+ import jalview.io.exceptions.ImageOutputException;
  import jalview.io.gff.SequenceOntologyFactory;
  import jalview.schemes.ColourSchemeI;
  import jalview.schemes.ColourSchemeProperty;
@@@ -1005,9 -1006,7 +1006,7 @@@ public class Jalvie
              ex.printStackTrace(System.err);
            }
          }
-         // TODO - load PDB structure(s) to alignment JAL-629
-         // (associate with identical sequence in alignment, or a specified
-         // sequence)
+         
          if (groovyscript != null)
          {
            // Execute the groovy script after we've done all the rendering stuff
          String imageName = "unnamed.png";
          while (aparser.getSize() > 1)
          {
-           String outputFormat = aparser.nextValue();
-           file = aparser.nextValue();
-           if (outputFormat.equalsIgnoreCase("png"))
-           {
-             af.createPNG(new File(file));
-             imageName = (new File(file)).getName();
-             System.out.println("Creating PNG image: " + file);
-             continue;
-           }
-           else if (outputFormat.equalsIgnoreCase("svg"))
-           {
-             File imageFile = new File(file);
-             imageName = imageFile.getName();
-             af.createSVG(imageFile);
-             System.out.println("Creating SVG image: " + file);
-             continue;
-           }
-           else if (outputFormat.equalsIgnoreCase("html"))
+           try
            {
-             File imageFile = new File(file);
-             imageName = imageFile.getName();
-             HtmlSvgOutput htmlSVG = new HtmlSvgOutput(af.alignPanel);
-             htmlSVG.exportHTML(file);
+             String outputFormat = aparser.nextValue();
+             file = aparser.nextValue();
  
-             System.out.println("Creating HTML image: " + file);
-             continue;
-           }
-           else if (outputFormat.equalsIgnoreCase("biojsmsa"))
-           {
-             if (file == null)
+             if (outputFormat.equalsIgnoreCase("png"))
              {
-               System.err.println("The output html file must not be null");
-               return;
+               System.out.println("Creating PNG image: " + file);
+               af.createPNG(new File(file));
+               imageName = (new File(file)).getName();
+               continue;
              }
-             try
+             else if (outputFormat.equalsIgnoreCase("svg"))
              {
-               BioJsHTMLOutput.refreshVersionInfo(
-                       BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY);
-             } catch (URISyntaxException e)
+               System.out.println("Creating SVG image: " + file);
+               File imageFile = new File(file);
+               imageName = imageFile.getName();
+               af.createSVG(imageFile);
+               continue;
+             }
+             else if (outputFormat.equalsIgnoreCase("html"))
              {
-               e.printStackTrace();
+               File imageFile = new File(file);
+               imageName = imageFile.getName();
+               HtmlSvgOutput htmlSVG = new HtmlSvgOutput(af.alignPanel);
+               System.out.println("Creating HTML image: " + file);
+               htmlSVG.exportHTML(file);
+               continue;
              }
-             BioJsHTMLOutput bjs = new BioJsHTMLOutput(af.alignPanel);
-             bjs.exportHTML(file);
-             System.out
-                     .println("Creating BioJS MSA Viwer HTML file: " + file);
-             continue;
-           }
-           else if (outputFormat.equalsIgnoreCase("imgMap"))
-           {
-             af.createImageMap(new File(file), imageName);
-             System.out.println("Creating image map: " + file);
-             continue;
-           }
-           else if (outputFormat.equalsIgnoreCase("eps"))
-           {
-             File outputFile = new File(file);
-             System.out.println(
-                     "Creating EPS file: " + outputFile.getAbsolutePath());
-             af.createEPS(outputFile);
-             continue;
-           }
-           FileFormatI outFormat = null;
-           try
-           {
-             outFormat = FileFormats.getInstance().forName(outputFormat);
-           } catch (Exception formatP)
-           {
-             System.out.println("Couldn't parse " + outFormat
-                     + " as a valid Jalview format string.");
-           }
-           if (outFormat != null)
-           {
-             if (!outFormat.isWritable())
+             else if (outputFormat.equalsIgnoreCase("biojsmsa"))
+             {
+               if (file == null)
+               {
+                 System.err.println("The output html file must not be null");
+                 return;
+               }
+               try
+               {
+                 BioJsHTMLOutput.refreshVersionInfo(
+                         BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY);
+               } catch (URISyntaxException e)
+               {
+                 e.printStackTrace();
+               }
+               BioJsHTMLOutput bjs = new BioJsHTMLOutput(af.alignPanel);
+               System.out.println(
+                       "Creating BioJS MSA Viwer HTML file: " + file);
+               bjs.exportHTML(file);
+               continue;
+             }
+             else if (outputFormat.equalsIgnoreCase("imgMap"))
              {
+               System.out.println("Creating image map: " + file);
+               af.createImageMap(new File(file), imageName);
+               continue;
+             }
+             else if (outputFormat.equalsIgnoreCase("eps"))
+             {
+               File outputFile = new File(file);
                System.out.println(
-                       "This version of Jalview does not support alignment export as "
-                               + outputFormat);
+                       "Creating EPS file: " + outputFile.getAbsolutePath());
+               af.createEPS(outputFile);
+               continue;
+             }
+             FileFormatI outFormat = null;
+             try
+             {
+               outFormat = FileFormats.getInstance().forName(outputFormat);
+             } catch (Exception formatP)
+             {
+               System.out.println("Couldn't parse " + outFormat
+                       + " as a valid Jalview format string.");
              }
-             else
+             if (outFormat != null)
              {
-               af.saveAlignment(file, outFormat);
-               if (af.isSaveAlignmentSuccessful())
+               if (!outFormat.isWritable())
                {
-                 System.out.println("Written alignment in "
-                         + outFormat.getName() + " format to " + file);
+                 System.out.println(
+                         "This version of Jalview does not support alignment export as "
+                                 + outputFormat);
                }
                else
                {
-                 System.out.println("Error writing file " + file + " in "
-                         + outFormat.getName() + " format!!");
+                 af.saveAlignment(file, outFormat);
+                 if (af.isSaveAlignmentSuccessful())
+                 {
+                   System.out.println("Written alignment in "
+                           + outFormat.getName() + " format to " + file);
+                 }
+                 else
+                 {
+                   System.out.println("Error writing file " + file + " in "
+                           + outFormat.getName() + " format!!");
+                 }
                }
              }
+           } catch (ImageOutputException ioexc)
+           {
+             System.out.println(
+                     "Unexpected error whilst exporting image to " + file);
+             ioexc.printStackTrace();
            }
  
          }
       * start a User Config prompt asking if we can log usage statistics.
       */
      PromptUserConfig prompter = new PromptUserConfig(Desktop.desktop,
 -            "USAGESTATS", "Jalview Usage Statistics",
 -            "Do you want to help make Jalview better by enabling "
 -                    + "the collection of usage statistics with Google Analytics ?"
 -                    + "\n\n(you can enable or disable usage tracking in the preferences)",
 +            "USAGESTATS",
 +            MessageManager.getString("prompt.google_analytics_title"),
 +            MessageManager.getString("prompt.google_analytics"),
              new Runnable()
              {
                @Override
      }
    }
  
-   /*
-    * testoutput for string values
+   /******************************
+    * 
+    * TEST OUTPUT METHODS
+    * 
+    ******************************/
+   /**
+    * method for reporting string values parsed/processed during tests
+    * 
     */
    protected static void testoutput(ArgParser ap, Arg a, String s1,
            String s2)
      testoutput(true, a, s1, s2);
    }
  
+   /**
+    * method for reporting string values parsed/processed during tests
+    */
    protected static void testoutput(BootstrapArgs bsa, Arg a, String s1,
            String s2)
    {
      testoutput(true, a, s1, s2);
    }
  
+   /**
+    * report value set for string values parsed/processed during tests
+    */
    private static void testoutput(boolean yes, Arg a, String s1, String s2)
    {
      if (yes && ((s1 == null && s2 == null)
@@@ -121,6 -121,7 +121,7 @@@ import jalview.io.FormatAdapter
  import jalview.io.IdentifyFile;
  import jalview.io.JalviewFileChooser;
  import jalview.io.JalviewFileView;
+ import jalview.io.exceptions.ImageOutputException;
  import jalview.jbgui.GSplitFrame;
  import jalview.jbgui.GStructureViewer;
  import jalview.project.Jalview2XML;
@@@ -535,9 -536,6 +536,9 @@@ public class Desktop extends jalview.jb
        setBounds(xPos, yPos, 900, 650);
      }
  
 +    // start dialogue queue for single dialogues
 +    startDialogQueue();
 +
      if (!Platform.isJS())
      /**
       * Java only
    /**
     * pause the queue
     */
 -  private java.util.concurrent.Semaphore block = new Semaphore(0);
 +  private Semaphore block = new Semaphore(0);
  
    private static groovy.ui.Console groovyConsole;
  
        {
          if (dialogPause)
          {
 -          try
 -          {
 -            block.acquire();
 -          } catch (InterruptedException x)
 -          {
 -          }
 +          acquireDialogQueue();
          }
          if (instance == null)
          {
      });
    }
  
 +  private boolean dialogQueueStarted = false;
 +
    public void startDialogQueue()
    {
 +    if (dialogQueueStarted)
 +    {
 +      return;
 +    }
      // set the flag so we don't pause waiting for another permit and semaphore
      // the current task to begin
 -    dialogPause = false;
 +    releaseDialogQueue();
 +    dialogQueueStarted = true;
 +  }
 +
 +  public void acquireDialogQueue()
 +  {
 +    try
 +    {
 +      block.acquire();
 +      dialogPause = true;
 +    } catch (InterruptedException e)
 +    {
 +      jalview.bin.Console.debug("Interruption when acquiring DialogueQueue",
 +              e);
 +    }
 +  }
 +
 +  public void releaseDialogQueue()
 +  {
 +    if (!dialogPause)
 +    {
 +      return;
 +    }
      block.release();
 +    dialogPause = false;
    }
  
    /**
      String title = "View of desktop";
      ImageExporter exporter = new ImageExporter(writer, null, TYPE.EPS,
              title);
-     exporter.doExport(of, this, width, height, title);
+     try {
+       exporter.doExport(of, this, width, height, title);
+     } catch (ImageOutputException ioex) {
+       jalview.bin.Console.error("Unexpected error whilst writing Jalview desktop snapshot as EPS",ioex);
+     }
    }
  
    /**
        jalview.bin.Console.debug(Cache.getStackTraceString(e));
      }
    }
+   /**
+    * closes the current instance window, disposes and forgets about it.
+    */
+   public static void closeDesktop()
+   {
+     if (Desktop.instance != null) {
+       Desktop.instance.closeAll_actionPerformed(null);
+       Desktop.instance.setVisible(false);
+       Desktop.instance.dispose();
+       Desktop.instance = null;
+     }
+   }
  }