* make cmdline scripting more flexible (allow system://in and script://<expression>)
This commit is contained in:
parent
4d037086a9
commit
596471c885
|
@ -7,8 +7,8 @@ import static net.sourceforge.tuned.FileUtilities.*;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.net.MalformedURLException;
|
import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URISyntaxException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -143,16 +143,23 @@ public class ArgumentBean {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public URL getScriptLocation() {
|
public URI getScriptLocation() {
|
||||||
try {
|
try {
|
||||||
return new URL(script);
|
return new URI(script);
|
||||||
} catch (MalformedURLException eu) {
|
} catch (URISyntaxException eu) {
|
||||||
|
if (script.startsWith("script://")) {
|
||||||
|
try {
|
||||||
|
return new URI("script", script.substring(9), null, null, null);
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
throw new IllegalArgumentException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
File file = new File(script);
|
File file = new File(script);
|
||||||
if (!file.exists())
|
if (!file.exists()) {
|
||||||
throw new FileNotFoundException(file.getPath());
|
throw new FileNotFoundException(file.getPath());
|
||||||
|
}
|
||||||
return file.toURI().toURL();
|
return file.toURI();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalArgumentException(e);
|
throw new IllegalArgumentException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,7 +91,7 @@ public class ArgumentProcessor {
|
||||||
Bindings bindings = new SimpleBindings();
|
Bindings bindings = new SimpleBindings();
|
||||||
bindings.put("args", args.getFiles(false));
|
bindings.put("args", args.getFiles(false));
|
||||||
|
|
||||||
Analytics.trackEvent("CLI", "ExecuteScript", args.getScriptLocation().getProtocol());
|
Analytics.trackEvent("CLI", "ExecuteScript", args.getScriptLocation().getScheme());
|
||||||
ScriptShell shell = new ScriptShell(cli, args, args.trustScript, AccessController.getContext());
|
ScriptShell shell = new ScriptShell(cli, args, args.trustScript, AccessController.getContext());
|
||||||
shell.run(args.getScriptLocation(), bindings);
|
shell.run(args.getScriptLocation(), bindings);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,11 @@ import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FilePermission;
|
import java.io.FilePermission;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.io.StringReader;
|
||||||
import java.lang.reflect.ReflectPermission;
|
import java.lang.reflect.ReflectPermission;
|
||||||
import java.net.SocketPermission;
|
import java.net.SocketPermission;
|
||||||
import java.net.URL;
|
import java.net.URI;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.security.AccessControlContext;
|
import java.security.AccessControlContext;
|
||||||
|
@ -95,9 +97,17 @@ class ScriptShell {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Object run(URL scriptLocation, Bindings bindings) throws Throwable {
|
public Object run(URI scriptLocation, Bindings bindings) throws Throwable {
|
||||||
if (scriptLocation.getProtocol().equals("file")) {
|
if (scriptLocation.getScheme().equals("file")) {
|
||||||
return run(new File(scriptLocation.toURI()), bindings);
|
return run(new InputStreamReader(new FileInputStream(new File(scriptLocation)), "UTF-8"), bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scriptLocation.getScheme().equals("system")) {
|
||||||
|
return run(new InputStreamReader(System.in), bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scriptLocation.getScheme().equals("script")) {
|
||||||
|
return run(new StringReader(scriptLocation.getAuthority()), bindings);
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetch remote script only if modified
|
// fetch remote script only if modified
|
||||||
|
@ -112,9 +122,8 @@ class ScriptShell {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Object run(File scriptFile, Bindings bindings) throws Throwable {
|
public Object run(Reader script, Bindings bindings) throws Throwable {
|
||||||
String script = readAll(new InputStreamReader(new FileInputStream(scriptFile), "UTF-8"));
|
return evaluate(readAll(script), bindings);
|
||||||
return evaluate(script, bindings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue