diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyDslDelegate.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyDslDelegate.java index b7e5645..a778004 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyDslDelegate.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyDslDelegate.java @@ -16,17 +16,11 @@ import org.codehaus.groovy.runtime.DefaultGroovyMethods; public class GroovyDslDelegate implements Script { private final GroovyScriptInfo scriptInfo = new GroovyScriptInfo(); - private final ScriptHttpClient HTTP; - private final ComputeInstanceManager InstanceManager; /** * 构建一个 DSL Delegate, 并传入可操作对象. - * @param httpClient Http 客户端. - * @param instanceManager 实例管理器. */ - public GroovyDslDelegate(ScriptHttpClient httpClient, ComputeInstanceManager instanceManager) { - HTTP = httpClient; - InstanceManager = instanceManager; + public GroovyDslDelegate() { } /** diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyScriptLoader.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyScriptLoader.java index ed4449a..6d65b11 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyScriptLoader.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/GroovyScriptLoader.java @@ -1,6 +1,7 @@ package net.lamgc.oracle.sentry.script.groovy; import com.google.common.base.Throwables; +import groovy.lang.Binding; import groovy.lang.GroovyClassLoader; import groovy.util.DelegatingScript; import net.lamgc.oracle.sentry.script.Script; @@ -14,6 +15,7 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -56,8 +58,9 @@ public class GroovyScriptLoader implements ScriptLoader { Constructor constructor = scriptClass.asSubclass(DelegatingScript.class).getConstructor(); DelegatingScript newScriptObject = constructor.newInstance(); - GroovyDslDelegate dslDelegate = new GroovyDslDelegate(context.HTTP(), context.InstanceManager()); + GroovyDslDelegate dslDelegate = new GroovyDslDelegate(); newScriptObject.setDelegate(dslDelegate); + newScriptObject.setBinding(createBinding(context)); newScriptObject.run(); scriptInfoMap.put(dslDelegate, dslDelegate.getScriptInfo()); return dslDelegate; @@ -71,4 +74,19 @@ public class GroovyScriptLoader implements ScriptLoader { public ScriptInfo getScriptInfo(Script script) { return scriptInfoMap.get(script); } + + private static Binding createBinding(ScriptComponents components) { + Binding binding = new Binding(); + for (Field field : components.getClass().getDeclaredFields()) { + try { + String name = field.getName(); + field.setAccessible(true); + Object o = field.get(components); + binding.setProperty(name, o); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + return binding; + } }