package foundation.workflow;
|
|
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.Method;
|
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataReader;
|
import foundation.dao.DataWriter;
|
import foundation.dao.bizlogic.IActionProvider;
|
import foundation.handler.DataPool;
|
import foundation.handler.ResultPool;
|
import foundation.handler.SingletonHandler;
|
import foundation.route.Operation;
|
|
public abstract class SingletonActionProvider extends SingletonHandler implements IActionProvider {
|
|
@Override
|
public void exec(WorkStep step, String methodName) throws Exception {
|
Method method = getMethod(methodName);
|
|
if (method == null) {
|
logger.error("method exec error: {} not exists", methodName);
|
return;
|
}
|
|
try {
|
method.invoke(this, step);
|
}
|
catch (InvocationTargetException e) {
|
e.printStackTrace();
|
Throwable throwable = e.getTargetException();
|
|
if (throwable == null) {
|
throw e;
|
}
|
else {
|
throw (Exception) throwable;
|
}
|
}
|
}
|
|
public void simulate(WorkStep step, String methodName) throws Exception {
|
logger.info("action provider {}.{} simulate", step.getActionName(), methodName);
|
}
|
|
@Override
|
protected void invokeMethod(Method method, DataPool dataPool, ResultPool resultPool) throws Exception {
|
//1.
|
Operation operation = dataPool.getOperation();
|
DataReader dataReader = new DataReader(operation, dataPool);
|
|
DataWriter dataWriter = new DataWriter(resultPool, dataReader.getDomain());
|
resultPool.setLetterWriter(dataWriter);
|
|
String dataName = dataReader.getDomain().getDataName();
|
WorkStepMeta stepMeta = new WorkStepMeta(dataName, operation.getOperator());
|
WorkStep step = new WorkStep(dataReader, dataWriter, stepMeta);
|
|
//2.
|
try {
|
method.invoke(this, step);
|
}
|
catch (InvocationTargetException e) {
|
e.printStackTrace();
|
Throwable throwable = e.getTargetException();
|
|
if (throwable == null) {
|
throw e;
|
}
|
else {
|
throw (Exception) throwable;
|
}
|
}
|
}
|
|
@Override
|
protected boolean validateMethodParameter(Class<?>[] parameters) {
|
if (parameters == null || parameters.length != 1) {
|
return false;
|
}
|
|
Class<?> type = parameters[0];
|
return type.isAssignableFrom(WorkStep.class);
|
}
|
|
public String getEventCode(DataPackage dataPackage, String operator) {
|
return null;
|
}
|
}
|