/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * 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
*
* This file is part of Jalview.
*
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;
import java.security.AllPermission;
}
}
}
+ long progress=-1;
// Finally, deal with the remaining input data.
if (file != null)
{
+ if (!headless)
+ {
+ desktop.setProgressBar("Processing commandline arguments...", progress=System.currentTimeMillis());
+ }
System.out.println("Opening file: " + file);
if (!file.startsWith("http://"))
&& 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_3.jar");
-
+ 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
+ jalview.bin.Cache.removeProperty("STARTUP_FILE");
+ }
+
protocol = "File";
if (file.indexOf("http:") > -1)
// and finally, turn off batch mode indicator - if the desktop still exists
if (desktop != null)
{
+ if (progress!=-1) {
+ desktop.setProgressBar(null, progress);
+ }
desktop.setInBatchMode(false);
}
}
System.err
.println("Sorry. Groovy support is currently only available when running with the Jalview GUI enabled.");
}
- File sfile = null;
+ /**
+ * for scripts contained in files
+ */
+ File tfile = null;
+ /**
+ * script's URI
+ */
+ URL sfile = null;
if (groovyscript.trim().equals("STDIN"))
{
// read from stdin into a tempfile and execute it
try
{
- sfile = File.createTempFile("jalview", "groovy");
+ tfile = File.createTempFile("jalview", "groovy");
PrintWriter outfile = new PrintWriter(new OutputStreamWriter(
- new FileOutputStream(sfile)));
+ new FileOutputStream(tfile)));
BufferedReader br = new BufferedReader(
new java.io.InputStreamReader(System.in));
String line = null;
} catch (Exception ex)
{
System.err.println("Failed to read from STDIN into tempfile "
- + ((sfile == null) ? "(tempfile wasn't created)" : sfile
+ + ((tfile == null) ? "(tempfile wasn't created)" : tfile
.toString()));
ex.printStackTrace();
return;
}
+ try {
+ sfile = tfile.toURI().toURL();
+ } catch (Exception x)
+ {
+ System.err.println("Unexpected Malformed URL Exception for temporary file created from STDIN: "+tfile.toURI());
+ x.printStackTrace();
+ return;
+ }
}
else
{
- sfile = new File(groovyscript);
- }
- if (!sfile.exists())
- {
- System.err.println("File '" + groovyscript + "' does not exist.");
- return;
- }
- if (!sfile.canRead())
- {
- System.err.println("File '" + groovyscript + "' cannot be read.");
- return;
- }
- if (sfile.length() < 1)
- {
- System.err.println("File '" + groovyscript + "' is empty.");
- return;
+ try
+ {
+ sfile = new URI(groovyscript).toURL();
+ } catch (Exception x)
+ {
+ tfile = new File(groovyscript);
+ if (!tfile.exists())
+ {
+ System.err.println("File '" + groovyscript + "' does not exist.");
+ return;
+ }
+ if (!tfile.canRead())
+ {
+ System.err.println("File '" + groovyscript + "' cannot be read.");
+ return;
+ }
+ if (tfile.length() < 1)
+ {
+ System.err.println("File '" + groovyscript + "' is empty.");
+ return;
+ }
+ try {
+ sfile = tfile.getAbsoluteFile().toURI().toURL();
+ } catch (Exception ex)
+ {
+ System.err.println("Failed to create a file URL for "+tfile.getAbsoluteFile());
+ return;
+ }
+ }
}
boolean success = false;
try
*/
Class[] bspec;
Object[] binding;
- int blen=((jalviewContext[0]==null) ? 0 : 1) + ((jalviewContext[1]==null) ? 0 : 1);
- String cnames[] = new String[] { "Jalview", "currentAlFrame"};
- bspec=new Class[blen*2];
- binding=new Object[blen*2];
- blen=0;
- ClassLoader cl=null;
- for (int jc=0;jc<jalviewContext.length;jc++)
- {
- if (jalviewContext[jc]!=null) {
- if (cl==null)
- {
- cl = jalviewContext[jc].getClass().getClassLoader();
- }
- bspec[blen*2] = String.class;
- bspec[blen*2+1] = Object.class;
- binding[blen*2]=cnames[jc];
- binding[blen*2+1]=jalviewContext[jc];
- blen++;
+ int blen = ((jalviewContext[0] == null) ? 0 : 1)
+ + ((jalviewContext[1] == null) ? 0 : 1);
+ String cnames[] = new String[]
+ { "Jalview", "currentAlFrame" };
+ bspec = new Class[blen * 2];
+ binding = new Object[blen * 2];
+ blen = 0;
+ ClassLoader cl = null;
+ Map vbinding = new Hashtable();
+ for (int jc = 0; jc < jalviewContext.length; jc++)
+ {
+ if (jalviewContext[jc] != null)
+ {
+ if (cl == null)
+ {
+ cl = jalviewContext[jc].getClass().getClassLoader();
+ }
+ bspec[blen * 2] = String.class;
+ bspec[blen * 2 + 1] = Object.class;
+ binding[blen * 2] = cnames[jc];
+ binding[blen * 2 + 1] = jalviewContext[jc];
+ vbinding.put(cnames[jc], jalviewContext[jc]);
+ blen++;
}
}
Class gbindingc = cl.loadClass("groovy.lang.Binding");
- Constructor gbcons = gbindingc.getConstructor(null);
- Object gbinding = gbcons.newInstance(null);
-
- java.lang.reflect.Method setvar = gbindingc.getMethod("setVariable",
- bspec);
-
- setvar.invoke(gbinding, binding);
+ Constructor gbcons;
+ Object gbinding;
+ try
+ {
+ gbcons = gbindingc.getConstructor(Map.class);
+ gbinding = gbcons.newInstance(vbinding);
+ } catch (NoSuchMethodException x)
+ {
+ // old style binding config - using series of string/object values to
+ // setVariable.
+ gbcons = gbindingc.getConstructor(null);
+ gbinding = gbcons.newInstance(null);
+ java.lang.reflect.Method setvar = gbindingc.getMethod(
+ "setVariable", bspec);
+ setvar.invoke(gbinding, binding);
+ }
+ ;
Class gsec = cl.loadClass("groovy.util.GroovyScriptEngine");
Constructor gseccons = gsec.getConstructor(new Class[]
{ URL[].class }); // String[].class });
Object gse = gseccons.newInstance(new Object[]
{ new URL[]
- { sfile.toURL() } }); // .toString() } });
+ { sfile } }); // .toString() } });
java.lang.reflect.Method run = gsec.getMethod("run", new Class[]
{ String.class, gbindingc });
run.invoke(gse, new Object[]
- { sfile.getName(), gbinding });
+ { sfile.toString(), gbinding });
success = true;
} catch (Exception e)
{
{
// delete temp file that we made - but only if it was successfully
// executed
- sfile.delete();
+ tfile.delete();
}
}