package foundation.workflow;
|
|
import java.util.ArrayList;
|
import java.util.Iterator;
|
import java.util.List;
|
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataReader;
|
import foundation.dao.DataWriter;
|
import foundation.handler.ResultPool;
|
import foundation.json.IJSONProvider;
|
import foundation.json.IJSONWriter;
|
import foundation.util.ContentBuilder;
|
|
public class WorkFlowRuntime implements Iterable<WorkStep>, IJSONProvider {
|
|
|
private String dataName;
|
private String operator;
|
private DataPackage dataPackage;
|
private List<WorkStep> actionContexts;
|
private double transactionScore;
|
private boolean terminated;
|
private boolean simulate;
|
private DataReader dataReader;
|
private DataWriter dataWriter;
|
|
public WorkFlowRuntime() {
|
}
|
|
public WorkFlowRuntime(DataReader dataReader, DataWriter dataWriter) throws Exception {
|
//1.
|
this.dataReader = dataReader;
|
this.dataWriter = dataWriter;
|
|
transactionScore = 0;
|
terminated = false;
|
actionContexts = new ArrayList<WorkStep>();
|
}
|
|
public void reloadSteps(String dataName, String operator, WorkflowBuckets workflowBuckets) throws Exception {
|
this.dataName = dataName;
|
this.operator = operator;
|
|
List<WorkStepMeta> stepList = workflowBuckets.getWorkflow(dataName, operator);
|
|
if (stepList == null) {
|
return;
|
}
|
|
for (WorkStepMeta step: stepList) {
|
WorkStep actionContext = new WorkStep(this, step);
|
loadOne(actionContext);
|
}
|
}
|
|
public void loadSteps(String dataName, String operator, WorkflowBuckets workflowBuckets) throws Exception {
|
this.dataName = dataName;
|
this.operator = operator;
|
|
List<WorkStepMeta> stepList = workflowBuckets.getWorkflow(dataName, operator);
|
|
if (stepList == null) {
|
return;
|
}
|
|
for (WorkStepMeta step: stepList) {
|
WorkStep actionContext = new WorkStep(this, step);
|
loadOne(actionContext);
|
}
|
}
|
|
// public void loadReferToSteps(DataPackage dataPackage, Moment moment, String event, WorkflowBuckets workflowBuckets) {
|
// String dataName = dataPackage.getName();
|
// List<WorkStepMeta> steps = workflowBuckets.getWorkflow(dataName, moment, event);
|
//
|
// if (steps == null) {
|
// return;
|
// }
|
//
|
// for (WorkStepMeta step: steps) {
|
// WorkStep actionContext = new WorkStep(stateContext, this, step);
|
// actionContext.setDataPackage(dataPackage);
|
// loadOne(actionContext);
|
// }
|
// }
|
|
public void loadOne(WorkStep action) {
|
actionContexts.add(action);
|
transactionScore = transactionScore + action.getTransactionScore();
|
}
|
|
public int getActionLength() {
|
return actionContexts.size();
|
}
|
|
public boolean nesessaryTransaction() {
|
return transactionScore >= 1;
|
}
|
|
public <T>T getSender(Class<T> clazz, Moment moment) {
|
T result = null;
|
for (WorkStep step : actionContexts) {
|
result = step.getSender(clazz, moment);
|
|
if (result != null) {
|
break;
|
}
|
}
|
|
return result;
|
}
|
|
@Override
|
public Iterator<WorkStep> iterator() {
|
return actionContexts.iterator();
|
}
|
|
public String getDataName() {
|
return dataName;
|
}
|
|
public String getOperator() {
|
return operator;
|
}
|
|
public void terminate() {
|
terminated = true;
|
}
|
|
public boolean isTerminated() {
|
return terminated;
|
}
|
|
public void setDataPackage(DataPackage dataPackage) {
|
this.dataPackage = dataPackage;
|
}
|
|
public DataReader getDataReader() {
|
return dataReader;
|
}
|
|
public void setDataReader(DataReader dataReader) {
|
this.dataReader = dataReader;
|
}
|
|
public DataWriter getDataWriter() {
|
return dataWriter;
|
}
|
|
public void setDataWriter(DataWriter dataWriter) {
|
this.dataWriter = dataWriter;
|
}
|
|
public ResultPool getResultPool() {
|
return dataWriter.getResultPool();
|
}
|
|
public DataPackage getDataPackage() {
|
return dataPackage;
|
}
|
|
public boolean isSimulate() {
|
return simulate;
|
}
|
|
public void setSimulate(boolean value) {
|
simulate = value;
|
}
|
|
@Override
|
public String toString() {
|
String title = "[" + dataName + "-" + operator + "]: ";
|
ContentBuilder result = new ContentBuilder(title, ", ");
|
|
for (WorkStep action: actionContexts) {
|
action.toString(result);
|
}
|
|
return result.toString();
|
}
|
|
@Override
|
public void writeJSON(IJSONWriter writer) {
|
writer.beginObject();
|
|
writer.write("data_name", dataName);
|
writer.write("operator", operator);
|
writer.write("transaction_score", transactionScore);
|
|
writer.beginArray("actions");
|
for (WorkStep action: actionContexts) {
|
action.writeJSON(writer);
|
}
|
writer.endArray();
|
|
writer.endObject();
|
}
|
}
|