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.Domain;
|
import foundation.dao.bizlogic.IActionProvider;
|
import foundation.handler.BaseHandler;
|
import foundation.handler.DataPool;
|
import foundation.handler.ResultPool;
|
import foundation.route.Operation;
|
|
public abstract class ActionProvider extends BaseHandler implements IActionProvider {
|
|
protected WorkStep step;
|
protected Parameters params;
|
protected DataReader dataReader;
|
protected DataWriter dataWriter;
|
|
|
@Override
|
public void exec(WorkStep step, String methodName) throws Exception {
|
this.step = step;
|
this.dataReader = step.getDataReader();
|
this.dataWriter = step.getDataWriter();
|
|
Method method = getMethod(methodName);
|
|
if (method == null) {
|
logger.error("method exec error: {} not exists", methodName);
|
return;
|
}
|
|
try {
|
method.invoke(this);
|
}
|
catch (InvocationTargetException e) {
|
e.printStackTrace();
|
Throwable throwable = e.getTargetException();
|
|
if (throwable == null) {
|
throw e;
|
}
|
else {
|
throw (Exception) throwable;
|
}
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
throw e;
|
}
|
}
|
|
|
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);
|
|
Domain domain = dataReader.getDomain();
|
String dataName = domain != null ? domain.getDataName() : null;
|
String operator = operation.getOperator();
|
|
WorkStepMeta meta = new WorkStepMeta(dataName, operation.getOperator());
|
WorkStep step = new WorkStep(dataReader, dataWriter, meta);
|
|
//2.
|
exec(step, operator);
|
};
|
|
public void terminateTask() {
|
if (step != null) {
|
step.terminateTask();
|
}
|
}
|
|
public String getEventCode(DataPackage dataPackage, String operator) {
|
return "";
|
}
|
|
|
public void setStep(WorkStep step) {
|
this.step = step;
|
this.dataReader = step.getDataReader();
|
this.dataWriter = step.getDataWriter();
|
}
|
}
|