package foundation.action;
|
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataReader;
|
import foundation.dao.DataWriter;
|
import foundation.dao.OperatorCode;
|
import foundation.dao.bizlogic.IActionProvider;
|
import foundation.handler.ResultPool;
|
import foundation.json.IJSONWriter;
|
import foundation.util.ContentBuilder;
|
import foundation.util.Util;
|
|
public class ActionContext {
|
|
private IWorkflowRuntime workFlow;
|
private StateContext stateContext;
|
private String dataName;
|
private DataPackage dataPackage;
|
private IWorkStep step;
|
private ActionMeta actionMeta;
|
private IActionProvider provider;
|
private String param;
|
private DataReader dataReader;
|
private DataWriter dataWriter;
|
|
|
public ActionContext() {
|
workFlow = new EmptyWorkflow();
|
}
|
|
public ActionContext(DataReader dataReader, DataWriter dataWriter, IWorkStep step) {
|
//1.
|
this.step = step;
|
this.dataName = step.getDataName();
|
|
this.dataReader = dataReader;
|
this.dataWriter = dataWriter;
|
|
//2.
|
provider = step.createActionProvider();
|
}
|
|
public ActionContext(StateContext stateContext, WorkFlowRuntime workFlow, IWorkStep step) {
|
//1.
|
this.stateContext = stateContext;
|
this.workFlow = workFlow;
|
this.step = step;
|
this.dataName = step.getDataName();
|
|
this.dataReader = workFlow.getDataReader();
|
this.dataWriter = workFlow.getDataWriter();
|
|
//2.
|
provider = step.createActionProvider();
|
}
|
|
public ActionContext newInstance() {
|
ActionContext result = new ActionContext();
|
|
result.stateContext = stateContext;
|
result.workFlow = workFlow;
|
result.dataReader = dataReader;
|
result.dataWriter = dataWriter;
|
result.step = step;
|
|
if (step != null) {
|
result.dataName = step.getDataName();
|
}
|
|
return result;
|
}
|
|
public void setDataPackage(DataPackage dataPackage) {
|
this.dataPackage = dataPackage;
|
}
|
|
public boolean isApprovedByStateEvent() {
|
String eventCode = step.getOnEventCode();
|
|
if (Util.isEmpty(eventCode) || StateContext.isEmpty(stateContext) || Util.isEmpty(dataName)) {
|
return true;
|
}
|
|
return stateContext.isState(dataName, eventCode);
|
}
|
|
public IWorkflowRuntime getWorkFlow() {
|
return workFlow;
|
}
|
|
public double getTransactionScore() {
|
return step.getTransactionScore();
|
}
|
|
public String getStepName() {
|
return step.getStepName();
|
}
|
|
public void terminateTask() {
|
workFlow.terminate();
|
}
|
|
public OperatorCode getOperatorCode() {
|
return step.getOperatorCode();
|
}
|
|
public DataReader getDataReader() {
|
return dataReader;
|
}
|
|
public DataWriter getDataWriter() {
|
return dataWriter;
|
}
|
|
public ResultPool getResultPool() {
|
return dataWriter.getResultPool();
|
}
|
|
public IWorkStep getStep() {
|
return step;
|
}
|
|
public String getDataName() throws Exception {
|
if (dataName == null) {
|
return dataReader.getString("dataname");
|
}
|
|
return dataName;
|
}
|
|
public DataPackage getDataPackage() throws Exception {
|
if (dataPackage == null) {
|
return dataReader.getDataPackage();
|
}
|
|
return dataPackage;
|
}
|
|
public IActionProvider getActionProvider() {
|
return provider;
|
}
|
|
public String getActionParam() {
|
if (step != null) {
|
return step.getActionParam();
|
}
|
|
if (actionMeta != null) {
|
return actionMeta.getParam();
|
}
|
|
return null;
|
}
|
|
public String getStepParam() {
|
if (step != null) {
|
return step.getParam();
|
}
|
|
return param;
|
}
|
|
public String getParam() {
|
return param;
|
}
|
|
public String getActionName() {
|
if (step != null) {
|
return step.getActionName();
|
}
|
|
return param;
|
}
|
|
public String getMethodName() {
|
if (step != null) {
|
return step.getMethodName();
|
}
|
|
if (actionMeta != null) {
|
return actionMeta.getMethodName();
|
}
|
|
return null;
|
}
|
|
public String getDescription() {
|
if (step != null) {
|
String onEvent = step.getOnEventCode();
|
|
if (Util.isEmpty(onEvent)) {
|
return step.getActionName();
|
}
|
|
return step.getActionName() + "(" + onEvent + ")";
|
}
|
|
return param;
|
}
|
|
public void setStateCode(String dataName, String stateCode) {
|
stateContext.setState(dataName, stateCode);
|
}
|
|
public void setWorkFlow(WorkFlowRuntime workFlow) {
|
this.workFlow = workFlow;
|
}
|
|
public <T> T getContext(Class<?> clazz) {
|
return workFlow.getContext(clazz);
|
}
|
|
public void addContext(Object context) {
|
workFlow.addContext(context);
|
}
|
|
public void setProvider(IActionProvider provider) {
|
this.provider = provider;
|
}
|
|
public void setParam(String param) {
|
this.param = param;
|
}
|
|
public void toString(ContentBuilder result) {
|
step.toString(result);
|
}
|
|
public void writeJSON(IJSONWriter writer) {
|
writer.beginObject();
|
|
step.writeJSONBody(writer);
|
writer.write("param", step.getParam());
|
|
writer.endObject();
|
}
|
|
public String getParam(String paramName, String defaultValue) {
|
if(dataReader != null) {
|
return dataReader.getString(paramName, defaultValue);
|
}
|
|
return defaultValue;
|
}
|
}
|