mirror of
https://github.com/LamGC/Oracle-Sentry.git
synced 2025-04-29 22:27: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 {
|
public class GroovyDslDelegate implements Script {
|
||||||
|
|
||||||
private final GroovyScriptInfo scriptInfo = new GroovyScriptInfo();
|
private final GroovyScriptInfo scriptInfo = new GroovyScriptInfo();
|
||||||
private final ScriptHttpClient HTTP;
|
|
||||||
private final ComputeInstanceManager InstanceManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建一个 DSL Delegate, 并传入可操作对象.
|
* 构建一个 DSL Delegate, 并传入可操作对象.
|
||||||
* @param httpClient Http 客户端.
|
|
||||||
* @param instanceManager 实例管理器.
|
|
||||||
*/
|
*/
|
||||||
public GroovyDslDelegate(ScriptHttpClient httpClient, ComputeInstanceManager instanceManager) {
|
public GroovyDslDelegate() {
|
||||||
HTTP = httpClient;
|
|
||||||
InstanceManager = instanceManager;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package net.lamgc.oracle.sentry.script.groovy;
|
package net.lamgc.oracle.sentry.script.groovy;
|
||||||
|
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
|
import groovy.lang.Binding;
|
||||||
import groovy.lang.GroovyClassLoader;
|
import groovy.lang.GroovyClassLoader;
|
||||||
import groovy.util.DelegatingScript;
|
import groovy.util.DelegatingScript;
|
||||||
import net.lamgc.oracle.sentry.script.Script;
|
import net.lamgc.oracle.sentry.script.Script;
|
||||||
@ -14,6 +15,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
@ -56,8 +58,9 @@ public class GroovyScriptLoader implements ScriptLoader {
|
|||||||
Constructor<? extends DelegatingScript> constructor =
|
Constructor<? extends DelegatingScript> constructor =
|
||||||
scriptClass.asSubclass(DelegatingScript.class).getConstructor();
|
scriptClass.asSubclass(DelegatingScript.class).getConstructor();
|
||||||
DelegatingScript newScriptObject = constructor.newInstance();
|
DelegatingScript newScriptObject = constructor.newInstance();
|
||||||
GroovyDslDelegate dslDelegate = new GroovyDslDelegate(context.HTTP(), context.InstanceManager());
|
GroovyDslDelegate dslDelegate = new GroovyDslDelegate();
|
||||||
newScriptObject.setDelegate(dslDelegate);
|
newScriptObject.setDelegate(dslDelegate);
|
||||||
|
newScriptObject.setBinding(createBinding(context));
|
||||||
newScriptObject.run();
|
newScriptObject.run();
|
||||||
scriptInfoMap.put(dslDelegate, dslDelegate.getScriptInfo());
|
scriptInfoMap.put(dslDelegate, dslDelegate.getScriptInfo());
|
||||||
return dslDelegate;
|
return dslDelegate;
|
||||||
@ -71,4 +74,19 @@ public class GroovyScriptLoader implements ScriptLoader {
|
|||||||
public ScriptInfo getScriptInfo(Script script) {
|
public ScriptInfo getScriptInfo(Script script) {
|
||||||
return scriptInfoMap.get(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