Merge branch 'JAL-1315_headlessEPS' into develop
authorJim Procter <jprocter@compbio.dundee.ac.uk>
Thu, 13 Jun 2013 15:55:18 +0000 (16:55 +0100)
committerJim Procter <jprocter@compbio.dundee.ac.uk>
Thu, 13 Jun 2013 15:55:18 +0000 (16:55 +0100)
src/jalview/gui/AlignmentPanel.java
test/jalview/bin/CommandLineOperations.java [new file with mode: 0644]

index 5f20808..4a679b6 100644 (file)
@@ -1094,7 +1094,9 @@ public class AlignmentPanel extends GAlignmentPanel implements
   void makeAlignmentImage(int type, File file)
   {
     long progress = System.currentTimeMillis();
-    if (alignFrame != null)
+    boolean headless = (System.getProperty("java.awt.headless") != null
+            && System.getProperty("java.awt.headless").equals("true"));
+    if (alignFrame != null && !headless)
     {
       alignFrame.setProgressBar("Saving "
               + (type == jalview.util.ImageMaker.PNG ? "PNG image"
@@ -1115,8 +1117,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
       if (av.getWrapAlignment())
       {
         height = getWrappedHeight();
-        if (System.getProperty("java.awt.headless") != null
-                && System.getProperty("java.awt.headless").equals("true"))
+        if (headless)
         {
           // need to obtain default alignment width and then add in any
           // additional allowance for id margin
@@ -1184,7 +1185,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
       }
     } finally
     {
-      if (alignFrame != null)
+      if (alignFrame != null && !headless)
       {
         alignFrame.setProgressBar("Export complete.", progress);
       }
diff --git a/test/jalview/bin/CommandLineOperations.java b/test/jalview/bin/CommandLineOperations.java
new file mode 100644 (file)
index 0000000..19bc165
--- /dev/null
@@ -0,0 +1,79 @@
+package jalview.bin;
+
+import static org.junit.Assert.*;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStreamReader;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class CommandLineOperations
+{
+
+  @BeforeClass
+  public static void setUpBeforeClass() throws Exception
+  {
+  }
+
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception
+  {
+  }
+/***
+ * from http://stackoverflow.com/questions/808276/how-to-add-a-timeout-value-when-using-javas-runtime-exec
+ * @author jimp
+ *
+ */
+private static class Worker extends Thread {
+  private final Process process;
+  private Integer exit;
+  private Worker(Process process) {
+    this.process = process;
+  }
+  public void run() {
+    try { 
+      exit = process.waitFor();
+    } catch (InterruptedException ignore) {
+      return;
+    }
+  }
+}
+  @Test
+  public void testHeadlessModeEPS() throws Exception
+  {
+    String jalview_input = "examples/uniref50.fa";
+    String jalview_output = "test_uniref50_out.eps";
+    String cmd = "java -Djava.awt.headless=true -Djava.ext.dirs=./lib -classpath ./classes jalview.bin.Jalview -nodisplay -open "+ jalview_input + " -eps " + jalview_output;
+
+    System.out.println("###############Jalview CMD: " + cmd);
+    Process ls2_proc = Runtime.getRuntime().exec(cmd);
+    BufferedReader outputReader = new BufferedReader(new InputStreamReader(ls2_proc.getInputStream()));
+        
+    BufferedReader errorReader = new BufferedReader(new InputStreamReader(ls2_proc.getErrorStream()));
+    Worker worker = new Worker(ls2_proc);
+    worker.start();
+    worker.join(9000);
+    System.out.println("Output:  ");
+    String ln=null;
+    while ((ln=outputReader.readLine())!=null) {
+      System.out.println(ln);
+    }
+    
+    System.out.println("Error:  " );
+    while ((ln=errorReader.readLine())!=null) {
+      System.out.println(ln);
+    }
+    assertTrue("Didn't create an output EPS file.", new File("test_uniref50_out.eps").exists());
+    assertTrue("Didn't create an EPS file with any content", new File("test_uniref50_out.eps").length()>4096);
+    if (worker.exit == null){
+      worker.interrupt();
+      Thread.currentThread().interrupt();
+      ls2_proc.destroy();
+      fail("Jalview did not exit after EPS generation (try running test again to verify - timeout at 9000ms).");
+}
+  }
+
+}