Package groovy.util
Class DelegatingScript
java.lang.Object
groovy.lang.GroovyObjectSupport
groovy.lang.Script
groovy.util.DelegatingScript
- All Implemented Interfaces:
GroovyObject
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);
-
Constructor Summary
Constructors Modifier Constructor Description protected
DelegatingScript()
protected
DelegatingScript(Binding binding)
-
Method Summary
Modifier and Type Method 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.Methods inherited from class groovy.lang.Script
evaluate, evaluate, getBinding, print, printf, printf, println, println, run, run, setBinding
Methods inherited from class groovy.lang.GroovyObjectSupport
getMetaClass, setMetaClass
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Constructor Details
-
DelegatingScript
protected DelegatingScript() -
DelegatingScript
-
-
Method Details
-
setDelegate
public void setDelegate(java.lang.Object delegate)Sets the delegation target. -
invokeMethod
public java.lang.Object invokeMethod(java.lang.String name, java.lang.Object args)Description copied from class:Script
Invoke a method (or closure in the binding) defined.- Specified by:
invokeMethod
in interfaceGroovyObject
- Overrides:
invokeMethod
in classScript
- Parameters:
name
- method to callargs
- arguments to pass to the method- Returns:
- value
-
getProperty
public java.lang.Object getProperty(java.lang.String property)Description copied from interface:GroovyObject
Retrieves a property value.- Specified by:
getProperty
in interfaceGroovyObject
- Overrides:
getProperty
in classScript
- Parameters:
property
- the name of the property of interest- Returns:
- the given property
-
setProperty
public void setProperty(java.lang.String property, java.lang.Object newValue)Description copied from interface:GroovyObject
Sets the given property to the new value.- Specified by:
setProperty
in interfaceGroovyObject
- Overrides:
setProperty
in classScript
- Parameters:
property
- the name of the property of interestnewValue
- the new value for the property
-
getDelegate
public java.lang.Object getDelegate()
-