Skip to content

Commit

Permalink
add registry for workflow and state def
Browse files Browse the repository at this point in the history
  • Loading branch information
duoertai committed Sep 28, 2022
1 parent df56034 commit 3bc8f05
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions core/src/main/java/iwf/core/Registry.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package iwf.core;

import java.util.HashMap;
import java.util.Map;

public class Registry {
// workflow type -> workflow
private final Map<String,Workflow> workflowStore = new HashMap<>();

// (workflow type, stateId)-> StateDef
private final Map<String, StateDef> workflowStateStore = new HashMap<>();

private static final String DELIMITER = "_";

public void addWorkflow(final Workflow wf){
String workflowType = wf.getClass().getSimpleName();

if (workflowStore.containsKey(workflowType)) {
throw new RuntimeException(String.format("Workflow type %s already exists", workflowType));
}
workflowStore.put(workflowType, wf);

for (StateDef stateDef: wf.getStates()) {
String key = getStateDefKey(workflowType, stateDef.getWorkflowState().getStateId());
if (workflowStateStore.containsKey(key)) {
throw new RuntimeException(String.format("Workflow state definition %s already exists", key));
} else {
workflowStateStore.put(key, stateDef);
}
}
}

public Workflow getWorkflow(final String workflowType){
return workflowStore.get(workflowType);
}

public StateDef getWorkflowState(final String workflowType, final String stateId){
return workflowStateStore.get(getStateDefKey(workflowType, stateId));
}

private String getStateDefKey(final String workflowType, final String stateId) {
return workflowType + DELIMITER + stateId;
}
}

0 comments on commit 3bc8f05

Please sign in to comment.