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 protectedDelegatingScript()protectedDelegatingScript(Binding binding) -
Method Summary
Modifier and Type Method Description java.lang.ObjectgetDelegate()java.lang.ObjectgetProperty(java.lang.String property)Retrieves a property value.java.lang.ObjectinvokeMethod(java.lang.String name, java.lang.Object args)Invoke a method (or closure in the binding) defined.voidsetDelegate(java.lang.Object delegate)Sets the delegation target.voidsetProperty(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, setBindingMethods inherited from class groovy.lang.GroovyObjectSupport
getMetaClass, setMetaClassMethods 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:ScriptInvoke a method (or closure in the binding) defined.- Specified by:
invokeMethodin interfaceGroovyObject- Overrides:
invokeMethodin 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:GroovyObjectRetrieves a property value.- Specified by:
getPropertyin interfaceGroovyObject- Overrides:
getPropertyin 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:GroovyObjectSets the given property to the new value.- Specified by:
setPropertyin interfaceGroovyObject- Overrides:
setPropertyin classScript- Parameters:
property- the name of the property of interestnewValue- the new value for the property
-
getDelegate
public java.lang.Object getDelegate()
-