JAL-1503 update version in GPL header
[jalview.git] / src / jalview / bin / Jalview.java
index 272250e..859b6f5 100755 (executable)
@@ -1,19 +1,20 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
+ * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- * 
+ *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.bin;
 
@@ -24,7 +25,6 @@ import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.lang.reflect.Constructor;
-import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
 import java.net.URLDecoder;
@@ -129,6 +129,11 @@ public class Jalview
                       + "\n~Read documentation in Application or visit http://www.jalview.org for description of Features and Annotations file~\n\n");
       System.exit(0);
     }
+    if (aparser.contains("nodisplay") || aparser.contains("nogui") || aparser.contains("headless"))
+    {
+      System.setProperty("java.awt.headless", "true");
+      headless=true;
+    }
     Cache.loadProperties(aparser.getValue("props")); // must do this before
     // anything else!
     String defs = aparser.getValue("setprop");
@@ -148,16 +153,12 @@ public class Jalview
       }
       defs = aparser.getValue("setprop");
     }
-    if (aparser.contains("nodisplay"))
-    {
-      System.setProperty("java.awt.headless", "true");
-    }
     if (System.getProperty("java.awt.headless") != null
             && System.getProperty("java.awt.headless").equals("true"))
     {
       headless = true;
     }
-
+    System.setProperty("http.agent", "Jalview Desktop/"+Cache.getDefault("VERSION", "Unknown"));
     try
     {
       Cache.initLogger();
@@ -216,6 +217,7 @@ public class Jalview
           }
         }
       }
+      desktop.checkForNews();
     }
 
     String file = null, protocol = null, format = null, data = null;
@@ -250,7 +252,8 @@ public class Jalview
       {
         try
         {
-          String viprotocol = jalview.io.AppletFormatAdapter.checkProtocol(vamsasImport);
+          String viprotocol = jalview.io.AppletFormatAdapter
+                  .checkProtocol(vamsasImport);
           if (viprotocol == jalview.io.FormatAdapter.FILE)
           {
             inSession = desktop.vamsasImport(new File(vamsasImport));
@@ -318,13 +321,14 @@ public class Jalview
         }
       }
     }
-    long progress=-1;
+    long progress = -1;
     // Finally, deal with the remaining input data.
     if (file != null)
     {
       if (!headless)
       {
-        desktop.setProgressBar("Processing commandline arguments...", progress=System.currentTimeMillis());
+        desktop.setProgressBar("Processing commandline arguments...",
+                progress = System.currentTimeMillis());
       }
       System.out.println("Opening file: " + file);
 
@@ -349,158 +353,164 @@ public class Jalview
       if (af == null)
       {
         System.out.println("error");
-        return;
       }
-
-      data = aparser.getValue("colour", true);
-      if (data != null)
+      else
       {
-        data.replaceAll("%20", " ");
-
-        jalview.schemes.ColourSchemeI cs = jalview.schemes.ColourSchemeProperty
-                .getColour(af.getViewport().getAlignment(), data);
 
-        if (cs == null)
+        data = aparser.getValue("colour", true);
+        if (data != null)
         {
-          jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(
-                  "white");
-          ucs.parseAppletParameter(data);
-          cs = ucs;
-        }
+          data.replaceAll("%20", " ");
 
-        System.out.println("colour is " + data);
-        af.changeColour(cs);
-      }
+          jalview.schemes.ColourSchemeI cs = jalview.schemes.ColourSchemeProperty
+                  .getColour(af.getViewport().getAlignment(), data);
 
-      // Must maintain ability to use the groups flag
-      data = aparser.getValue("groups", true);
-      if (data != null)
-      {
-        af.parseFeaturesFile(data, jalview.io.AppletFormatAdapter.checkProtocol(data));
-        System.out.println("Added " + data);
-      }
-      data = aparser.getValue("features", true);
-      if (data != null)
-      {
-        af.parseFeaturesFile(data, jalview.io.AppletFormatAdapter.checkProtocol(data));
-        System.out.println("Added " + data);
-      }
-
-      data = aparser.getValue("annotations", true);
-      if (data != null)
-      {
-        af.loadJalviewDataFile(data, null, null, null);
-        System.out.println("Added " + data);
-      }
-      // set or clear the sortbytree flag.
-      if (aparser.contains("sortbytree"))
-      {
-        af.getViewport().setSortByTree(true);
-      }
-      if (aparser.contains("nosortbytree"))
-      {
-        af.getViewport().setSortByTree(false);
-      }
-      data = aparser.getValue("tree", true);
-      if (data != null)
-      {
-        jalview.io.NewickFile fin = null;
-        try
-        {
-          fin = new jalview.io.NewickFile(data, jalview.io.AppletFormatAdapter.checkProtocol(data));
-          if (fin != null)
+          if (cs == null)
           {
-            af.getViewport().setCurrentTree(
-                    af.ShowNewickTree(fin, data).getTree());
-            System.out.println("Added tree " + data);
+            jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(
+                    "white");
+            ucs.parseAppletParameter(data);
+            cs = ucs;
           }
-        } catch (IOException ex)
-        {
-          System.err.println("Couldn't add tree " + data);
-          ex.printStackTrace(System.err);
-        }
-      }
-      // TODO - load PDB structure(s) to alignment JAL-629
-      // (associate with identical sequence in alignment, or a specified
-      // sequence)
 
-      getFeatures = checkDasArguments(aparser);
-      if (af != null && getFeatures != null)
-      {
-        FeatureFetcher ff = startFeatureFetching(getFeatures);
-        if (ff != null)
-          while (!ff.allFinished() || af.operationInProgress())
-          {
-            // wait around until fetching is finished.
-            try
-            {
-              Thread.sleep(100);
-            } catch (Exception e)
-            {
+          System.out.println("colour is " + data);
+          af.changeColour(cs);
+        }
 
-            }
-          }
-        getFeatures = null; // have retrieved features - forget them now.
-      }
-      if (groovyscript != null)
-      {
-        // Execute the groovy script after we've done all the rendering stuff
-        // and before any images or figures are generated.
-        if (jalview.bin.Cache.groovyJarsPresent())
+        // Must maintain ability to use the groups flag
+        data = aparser.getValue("groups", true);
+        if (data != null)
         {
-          System.out.println("Executing script " + groovyscript);
-          executeGroovyScript(groovyscript, new Object[] {desktop,af});
+          af.parseFeaturesFile(data,
+                  jalview.io.AppletFormatAdapter.checkProtocol(data));
+          System.out.println("Added " + data);
         }
-        else
+        data = aparser.getValue("features", true);
+        if (data != null)
         {
-          System.err
-                  .println("Sorry. Groovy Support is not available, so ignoring the provided groovy script "
-                          + groovyscript);
+          af.parseFeaturesFile(data,
+                  jalview.io.AppletFormatAdapter.checkProtocol(data));
+          System.out.println("Added " + data);
         }
-        groovyscript = null;
-      }
-      String imageName = "unnamed.png";
-      while (aparser.getSize() > 1)
-      {
-        format = aparser.nextValue();
-        file = aparser.nextValue();
 
-        if (format.equalsIgnoreCase("png"))
+        data = aparser.getValue("annotations", true);
+        if (data != null)
         {
-          af.createPNG(new java.io.File(file));
-          imageName = (new java.io.File(file)).getName();
-          System.out.println("Creating PNG image: " + file);
-          continue;
+          af.loadJalviewDataFile(data, null, null, null);
+          System.out.println("Added " + data);
         }
-        else if (format.equalsIgnoreCase("imgMap"))
+        // set or clear the sortbytree flag.
+        if (aparser.contains("sortbytree"))
         {
-          af.createImageMap(new java.io.File(file), imageName);
-          System.out.println("Creating image map: " + file);
-          continue;
+          af.getViewport().setSortByTree(true);
         }
-        else if (format.equalsIgnoreCase("eps"))
+        if (aparser.contains("nosortbytree"))
         {
-          System.out.println("Creating EPS file: " + file);
-          af.createEPS(new java.io.File(file));
-          continue;
+          af.getViewport().setSortByTree(false);
         }
+        data = aparser.getValue("tree", true);
+        if (data != null)
+        {
+          jalview.io.NewickFile fin = null;
+          try
+          {
+            fin = new jalview.io.NewickFile(data,
+                    jalview.io.AppletFormatAdapter.checkProtocol(data));
+            if (fin != null)
+            {
+              af.getViewport().setCurrentTree(
+                      af.ShowNewickTree(fin, data).getTree());
+              System.out.println("Added tree " + data);
+            }
+          } catch (IOException ex)
+          {
+            System.err.println("Couldn't add tree " + data);
+            ex.printStackTrace(System.err);
+          }
+        }
+        // TODO - load PDB structure(s) to alignment JAL-629
+        // (associate with identical sequence in alignment, or a specified
+        // sequence)
 
-        if (af.saveAlignment(file, format))
+        getFeatures = checkDasArguments(aparser);
+        if (af != null && getFeatures != null)
         {
-          System.out.println("Written alignment in " + format
-                  + " format to " + file);
+          FeatureFetcher ff = startFeatureFetching(getFeatures);
+          if (ff != null)
+            while (!ff.allFinished() || af.operationInProgress())
+            {
+              // wait around until fetching is finished.
+              try
+              {
+                Thread.sleep(100);
+              } catch (Exception e)
+              {
+
+              }
+            }
+          getFeatures = null; // have retrieved features - forget them now.
         }
-        else
+        if (groovyscript != null)
         {
-          System.out.println("Error writing file " + file + " in " + format
-                  + " format!!");
+          // Execute the groovy script after we've done all the rendering stuff
+          // and before any images or figures are generated.
+          if (jalview.bin.Cache.groovyJarsPresent())
+          {
+            System.out.println("Executing script " + groovyscript);
+            executeGroovyScript(groovyscript, new Object[]
+            { desktop, af });
+          }
+          else
+          {
+            System.err
+                    .println("Sorry. Groovy Support is not available, so ignoring the provided groovy script "
+                            + groovyscript);
+          }
+          groovyscript = null;
         }
+        String imageName = "unnamed.png";
+        while (aparser.getSize() > 1)
+        {
+          format = aparser.nextValue();
+          file = aparser.nextValue();
 
-      }
+          if (format.equalsIgnoreCase("png"))
+          {
+            af.createPNG(new java.io.File(file));
+            imageName = (new java.io.File(file)).getName();
+            System.out.println("Creating PNG image: " + file);
+            continue;
+          }
+          else if (format.equalsIgnoreCase("imgMap"))
+          {
+            af.createImageMap(new java.io.File(file), imageName);
+            System.out.println("Creating image map: " + file);
+            continue;
+          }
+          else if (format.equalsIgnoreCase("eps"))
+          {
+            System.out.println("Creating EPS file: " + file);
+            af.createEPS(new java.io.File(file));
+            continue;
+          }
 
-      while (aparser.getSize() > 0)
-      {
-        System.out.println("Unknown arg: " + aparser.nextValue());
+          if (af.saveAlignment(file, format))
+          {
+            System.out.println("Written alignment in " + format
+                    + " format to " + file);
+          }
+          else
+          {
+            System.out.println("Error writing file " + file + " in "
+                    + format + " format!!");
+          }
+
+        }
+
+        while (aparser.getSize() > 0)
+        {
+          System.out.println("Unknown arg: " + aparser.nextValue());
+        }
       }
     }
     AlignFrame startUpAlframe = null;
@@ -510,16 +520,19 @@ public class Jalview
     if (!headless && file == null && vamsasImport == null
             && jalview.bin.Cache.getDefault("SHOW_STARTUP_FILE", true))
     {
-      file = jalview.bin.Cache.getDefault("STARTUP_FILE",
-              jalview.bin.Cache.getDefault("www.jalview.org", "http://www.jalview.org")+"/examples/exampleFile_2_7.jar");
+      file = jalview.bin.Cache.getDefault(
+              "STARTUP_FILE",
+              jalview.bin.Cache.getDefault("www.jalview.org",
+                      "http://www.jalview.org")
+                      + "/examples/exampleFile_2_7.jar");
       if (file.equals("http://www.jalview.org/examples/exampleFile_2_3.jar"))
       {
         // hardwire upgrade of the startup file
-        file.replace("_2_3.jar","_2_7.jar");
-        // and remove the stale setting 
+        file.replace("_2_3.jar", "_2_7.jar");
+        // and remove the stale setting
         jalview.bin.Cache.removeProperty("STARTUP_FILE");
       }
-      
+
       protocol = "File";
 
       if (file.indexOf("http:") > -1)
@@ -558,7 +571,8 @@ public class Jalview
       if (jalview.bin.Cache.groovyJarsPresent())
       {
         System.out.println("Executing script " + groovyscript);
-        executeGroovyScript(groovyscript, new Object[] { desktop, startUpAlframe});
+        executeGroovyScript(groovyscript, new Object[]
+        { desktop, startUpAlframe });
       }
       else
       {
@@ -570,7 +584,8 @@ public class Jalview
     // and finally, turn off batch mode indicator - if the desktop still exists
     if (desktop != null)
     {
-      if (progress!=-1) {
+      if (progress != -1)
+      {
         desktop.setProgressBar(null, progress);
       }
       desktop.setInBatchMode(false);
@@ -605,7 +620,7 @@ public class Jalview
                 Cache.log.info("Not enabling Google Tracking.");
               }
             }, null, true);
-    SwingUtilities.invokeLater(prompter);
+    desktop.addDialogThread(prompter);
   }
 
   /**
@@ -660,11 +675,14 @@ public class Jalview
         ex.printStackTrace();
         return;
       }
-      try {
+      try
+      {
         sfile = tfile.toURI().toURL();
       } catch (Exception x)
       {
-        System.err.println("Unexpected Malformed URL Exception for temporary file created from STDIN: "+tfile.toURI());
+        System.err
+                .println("Unexpected Malformed URL Exception for temporary file created from STDIN: "
+                        + tfile.toURI());
         x.printStackTrace();
         return;
       }
@@ -692,11 +710,13 @@ public class Jalview
           System.err.println("File '" + groovyscript + "' is empty.");
           return;
         }
-        try {
-        sfile = tfile.getAbsoluteFile().toURI().toURL();
+        try
+        {
+          sfile = tfile.getAbsoluteFile().toURI().toURL();
         } catch (Exception ex)
         {
-          System.err.println("Failed to create a file URL for "+tfile.getAbsoluteFile());
+          System.err.println("Failed to create a file URL for "
+                  + tfile.getAbsoluteFile());
           return;
         }
       }