X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FJalview.java;h=4f383a0b22dea2bac633d13893306cd04086526e;hb=a8d30fa38a5d3e9cccf08aa446ca8ab00469bfd4;hp=5d0b9d674227137e562cf80cdad707684bf79648;hpb=013c39d4eaab0ed509d21e83676fa4da284d7fde;p=jalview.git diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index 5d0b9d6..4f383a0 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -18,9 +18,14 @@ */ package jalview.bin; +import java.io.BufferedReader; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; import java.lang.reflect.Constructor; +import java.net.URL; import java.util.*; import javax.swing.*; @@ -80,7 +85,7 @@ public class Jalview + "-noquestionnaire\tTurn off questionnaire check." + "-dasserver nickname=URL\tAdd and enable a das server with given nickname (alphanumeric or underscores only) for retrieval of features for all alignments." + "-fetchfrom nickname\tQuery nickname for features for the alignments and display them." - + "-groovy FILE\tExecute groovy script in FILE, after all other arguments have been processed." + + "-groovy FILE\tExecute groovy script in FILE, after all other arguments have been processed (if FILE is the text 'STDIN' then the file will be read from STDIN)" + "\n\n~Read documentation in Application or visit http://www.jalview.org for description of Features and Annotations file~\n\n"); System.exit(0); } @@ -398,7 +403,32 @@ public class Jalview { System.err.println("Sorry. Groovy support is currently only available when running with the Jalview GUI enabled."); } - File sfile = new File(groovyscript); + File sfile = null; + if (groovyscript.trim().equals("STDIN")) + { + // read from stdin into a tempfile and execute it + try { + sfile = File.createTempFile("jalview", "groovy"); + PrintWriter outfile = new PrintWriter(new OutputStreamWriter(new FileOutputStream(sfile))); + BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in)); + String line=null; + while ((line=br.readLine())!=null) + { + outfile.write(line+"\n"); + } + br.close(); + outfile.flush(); + outfile.close(); + + } catch (Exception ex) + { + System.err.println("Failed to read from STDIN into tempfile "+((sfile==null) ? "(tempfile wasn't created)" : sfile.toString())); + ex.printStackTrace(); + return; + } + } else { + sfile = new File(groovyscript); + } if (!sfile.exists()) { System.err.println("File '"+groovyscript+"' does not exist."); @@ -414,6 +444,7 @@ public class Jalview System.err.println("File '"+groovyscript+"' is empty."); return; } + boolean success = false; try { /* The following code performs the GroovyScriptEngine invocation using reflection, * and is equivalent to this fragment from the embedding groovy documentation on @@ -436,14 +467,21 @@ public class Jalview java.lang.reflect.Method setvar = gbindingc.getMethod("setVariable", new Class[] { String.class, Object.class} ); setvar.invoke(gbinding, new Object[] { "Jalview", jalviewContext}); Class gsec = cl.loadClass("groovy.util.GroovyScriptEngine"); - Constructor gseccons = gsec.getConstructor(new Class[] { String[].class }); - Object gse = gseccons.newInstance(new Object[] { new String[] { groovyscript } }); + Constructor gseccons = gsec.getConstructor(new Class[] { URL[].class } ); // String[].class }); + Object gse = gseccons.newInstance(new Object[] { new URL[] { sfile.toURL() } }); // .toString() } }); java.lang.reflect.Method run = gsec.getMethod("run", new Class[]{ String.class, gbindingc }); run.invoke(gse, new Object[] { sfile.getName(), gbinding }); + success = true; } catch (Exception e) { System.err.println("Exception Whilst trying to execute file "+sfile+" as a groovy script."); e.printStackTrace(System.err); + + } + if (success && groovyscript.equals("STDIN")) + { + // delete temp file that we made - but only if it was successfully executed + sfile.delete(); } } /**