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;
}
}
}
+ if (!headless)
+ {
+ desktop.setProgressBar("Processing commandline arguments...", Jalview.class.hashCode());
+ }
protocol = jalview.io.AppletFormatAdapter.checkProtocol(file);
// and finally, turn off batch mode indicator - if the desktop still exists
if (desktop != null)
{
+ desktop.setProgressBar(null, Jalview.class.hashCode());
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();
}
}