package com.nfwork.dbfound.model.bean;
import java.util.Map;
import org.apache.commons.beanutils.MethodUtils;
import com.nfwork.dbfound.core.Context;
import com.nfwork.dbfound.exception.DBFoundPackageException;
import com.nfwork.dbfound.exception.DBFoundRuntimeException;
import com.nfwork.dbfound.model.base.JavaSupport;
import com.nfwork.dbfound.model.base.ContextAware;
import com.nfwork.dbfound.model.base.ParamsAware;
import com.nfwork.dbfound.model.base.ProvideNameAware;
import com.nfwork.dbfound.util.LogUtil;
public class Java extends SqlEntity {
private static final long serialVersionUID = -8978726798343582780L;
private String className;
private String method;
@Override
@SuppressWarnings("unchecked")
public void execute(Context context, Map<String, Param> params,
String provideName) {
if (method == null || "".equals(method)) {
method = "execute";
}
LogUtil.info("执行Java,类:" + className + ",方法:" + method);
try {
Class executeClass = Class.forName(className);
Object object = executeClass.newInstance();
if (object instanceof JavaSupport) {
MethodUtils.invokeMethod(object, "setParams",
new Object[] { params });
MethodUtils.invokeMethod(object, "setContext",
new Object[] { context });
MethodUtils.invokeMethod(object, "setProvideName",
new Object[] { provideName });
} else if (executeClass.getInterfaces().length > 0) {
if (object instanceof ParamsAware) {
MethodUtils.invokeMethod(object, "setParams",
new Object[] { params });
}
if (object instanceof ContextAware) {
MethodUtils.invokeMethod(object, "setContext",
new Object[] { context });
}
if (object instanceof ProvideNameAware) {
MethodUtils.invokeMethod(object, "setProvideName",
new Object[] { provideName });
}
}
MethodUtils.invokeMethod(object, method, new Object[] {});
} catch (ClassNotFoundException e) {
throw new DBFoundRuntimeException("类" + className + "不存在");
} catch (Exception ee) {
Throwable throwable = ee.getCause();
if (throwable != null && throwable instanceof Exception) {
if (throwable instanceof RuntimeException) {
throw (RuntimeException)throwable;
}
throw new DBFoundPackageException((Exception) throwable);
}
throw new DBFoundPackageException(ee);
}
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
}