From 3bc8f0557e5b249f3fcf065d1e4a30b926be9306 Mon Sep 17 00:00:00 2001 From: duoertai Date: Tue, 27 Sep 2022 21:06:20 -0700 Subject: [PATCH] add registry for workflow and state def --- core/src/main/java/iwf/core/Registry.java | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 core/src/main/java/iwf/core/Registry.java diff --git a/core/src/main/java/iwf/core/Registry.java b/core/src/main/java/iwf/core/Registry.java new file mode 100644 index 0000000..e8eb9bb --- /dev/null +++ b/core/src/main/java/iwf/core/Registry.java @@ -0,0 +1,44 @@ +package iwf.core; + +import java.util.HashMap; +import java.util.Map; + +public class Registry { + // workflow type -> workflow + private final Map workflowStore = new HashMap<>(); + + // (workflow type, stateId)-> StateDef + private final Map 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; + } +}