public abstract class DelegatingScript extends Script
Script that performs method invocations and property access like Closure does.
DelegatingScript is a convenient basis for loading a custom-defined DSL as a Script, then execute it.
The following sample code illustrates how to do it:
class MyDSL {
public void foo(int x, int y, Closure z) { ... }
public void setBar(String a) { ... }
}
CompilerConfiguration cc = new CompilerConfiguration();
cc.setScriptBaseClass(DelegatingScript.class.getName());
GroovyShell sh = new GroovyShell(cl,new Binding(),cc);
DelegatingScript script = (DelegatingScript)sh.parse(new File("my.dsl"))
script.setDelegate(new MyDSL());
script.run();
my.dsl can look like this:
foo(1,2) {
....
}
bar = ...;
DelegatingScript does this by delegating property access and method invocation to the delegate object.
More formally speaking, given the following script:
a = 1; b(2);
Using DelegatingScript as the base class, the code will run as:
delegate.a = 1; delegate.b(2);... whereas in plain
Script, this will be run as:
binding.setProperty("a",1);
((Closure)binding.getProperty("b")).call(2);
| Modifier | Constructor and Description |
|---|---|
protected |
DelegatingScript() |
protected |
DelegatingScript(Binding binding) |
| Modifier and Type | Method and Description |
|---|---|
Object |
getDelegate() |
Object |
getProperty(String property)
Retrieves a property value.
|
Object |
invokeMethod(String name,
Object args)
Invoke a method (or closure in the binding) defined.
|
void |
setDelegate(Object delegate)
Sets the delegation target.
|
void |
setProperty(String property,
Object newValue)
Sets the given property to the new value.
|
evaluate, evaluate, getBinding, print, printf, printf, println, println, run, run, setBindinggetMetaClass, setMetaClassprotected DelegatingScript()
protected DelegatingScript(Binding binding)
public void setDelegate(Object delegate)
public Object invokeMethod(String name, Object args)
ScriptinvokeMethod in interface GroovyObjectinvokeMethod in class Scriptname - method to callargs - arguments to pass to the methodpublic Object getProperty(String property)
GroovyObjectgetProperty in interface GroovyObjectgetProperty in class Scriptproperty - the name of the property of interestpublic void setProperty(String property, Object newValue)
GroovyObjectsetProperty in interface GroovyObjectsetProperty in class Scriptproperty - the name of the property of interestnewValue - the new value for the propertypublic Object getDelegate()