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 |
---|---|
java.lang.Object |
getDelegate() |
java.lang.Object |
getProperty(java.lang.String property)
Retrieves a property value.
|
java.lang.Object |
invokeMethod(java.lang.String name,
java.lang.Object args)
Invoke a method (or closure in the binding) defined.
|
void |
setDelegate(java.lang.Object delegate)
Sets the delegation target.
|
void |
setProperty(java.lang.String property,
java.lang.Object newValue)
Sets the given property to the new value.
|
evaluate, evaluate, getBinding, print, printf, printf, println, println, run, run, setBinding
getMetaClass, setMetaClass
protected DelegatingScript()
protected DelegatingScript(Binding binding)
public void setDelegate(java.lang.Object delegate)
public java.lang.Object invokeMethod(java.lang.String name, java.lang.Object args)
Script
invokeMethod
in interface GroovyObject
invokeMethod
in class Script
name
- method to callargs
- arguments to pass to the methodpublic java.lang.Object getProperty(java.lang.String property)
GroovyObject
getProperty
in interface GroovyObject
getProperty
in class Script
property
- the name of the property of interestpublic void setProperty(java.lang.String property, java.lang.Object newValue)
GroovyObject
setProperty
in interface GroovyObject
setProperty
in class Script
property
- the name of the property of interestnewValue
- the new value for the propertypublic java.lang.Object getDelegate()