mirror of
https://github.com/LamGC/Oracle-Sentry.git
synced 2025-04-29 14:17:34 +00:00
refactor: 修改脚本内组件的传递方式.
将传递脚本组件的方式由 Delegate 类属性改为 Binding, 以增加灵活性和可维护性.
This commit is contained in:
parent
0dc44864cd
commit
3d249696a7
@ -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() {
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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<? extends DelegatingScript> 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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user