blob: cf7a2b3ad4dabbdffe48950c77792807f19db6a0 [file] [log] [blame]
package org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.wid.editor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Hashtable;
import org.eclipse.bpmn2.modeler.core.utils.JavaProjectClassLoader;
public class DroolsProxy {
private JavaProjectClassLoader classLoader;
private Hashtable<String, Class> droolsClasses = new Hashtable<String, Class>();
public DroolsProxy() {
this.classLoader = null;
}
public DroolsProxy(JavaProjectClassLoader classLoader) {
this.classLoader = classLoader;
}
public Class loadClass(String className) {
String fqn = className;
if (!className.contains(".")) {
// just the class name - no package name
if ("Work".equals(className)) {
fqn = "org.drools.core.process.core.Work";
}
else if ("WorkEditor".equals(className)) {
fqn = "org.drools.core.process.core.WorkEditor";
}
else if ("WorkDefinition".equals(className)) {
fqn = "org.drools.core.process.core.WorkDefinition";
}
else if ("WorkEditor".equals(className)) {
fqn = "org.drools.core.process.core.WorkEditor";
}
else if ("ParameterDefinition".equals(className)) {
fqn = "org.drools.core.process.core.ParameterDefinition";
}
else if ("ParameterDefinitionImpl".equals(className)) {
fqn = "org.drools.core.process.core.impl.ParameterDefinitionImpl";
}
else if ("WorkDefinitionImpl".equals(className)) {
fqn = "org.drools.core.process.core.impl.WorkDefinitionImpl";
}
else if ("WorkImpl".equals(className)) {
fqn = "org.drools.core.process.core.impl.WorkImpl";
}
else if ("DataType".equals(className)) {
fqn = "org.drools.core.process.core.datatype.DataType";
}
}
Class droolsClass = droolsClasses.get(fqn);
if (droolsClass==null) {
droolsClass = classLoader.loadClass(fqn);
if (droolsClass!=null)
droolsClasses.put(fqn, droolsClass);
}
return droolsClass;
}
public Object newObject(String className, Object...args) {
Class droolsClass = loadClass(className);
return newObject(droolsClass, args);
}
public Object newObject(Class droolsClass, Object...args) {
try {
Class types[] = new Class[args.length];
for (int i=0; i<args.length; ++i) {
types[i] = args[i].getClass();
}
Constructor ctor = droolsClass.getConstructor(types);
return ctor.newInstance(args);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public Object newParameterDefinition(String name, Object value) {
try {
Class types[] = new Class[2];
types[0] = String.class;
types[1] = loadClass("DataType");
Class parameterDefinitionClass = loadClass("ParameterDefinitionImpl");
Constructor ctor = parameterDefinitionClass.getConstructor(types);
return ctor.newInstance(name, value);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Object invoke(Object droolsObject, String methodName, Object...args) {
try {
Class types[] = new Class[args.length];
for (int i=0; i<args.length; ++i) {
types[i] = args[i].getClass();
}
Class c = droolsObject.getClass();
Method m = c.getMethod(methodName, types);
return m.invoke(droolsObject, args);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Object invokeWithTypes(Object droolsObject, String methodName, Object...args) {
try {
Class types[] = new Class[args.length/2];
Object values[] = new Object[args.length/2];
for (int i=0; i<args.length/2; ++i) {
types[i] = (Class)args[i*2];
}
for (int i=0; i<args.length/2; ++i) {
values[i] = args[i*2+1];
}
Class c = droolsObject.getClass();
Method m = c.getMethod(methodName, types);
return m.invoke(droolsObject, values);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}