Skip to content

Commit 5501a9e

Browse files
authored
Merge pull request #152 from tsurdilo/updateutil2
adding getStateWithName util method
2 parents 90bb6b2 + 9d79b4f commit 5501a9e

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

utils/src/main/java/io/serverlessworkflow/utils/WorkflowUtils.java

+22
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,28 @@ public static long getNumOfStates(Workflow workflow, DefaultState.Type type) {
293293
: DEFAULT_STATE_COUNT;
294294
}
295295

296+
/**
297+
* Returns workflow state from provided name, or null if not found.
298+
*
299+
* @param workflow
300+
* @param name
301+
* @return
302+
*/
303+
public static State getStateWithName(Workflow workflow, String name) {
304+
if (!hasStates(workflow)) {
305+
return null;
306+
}
307+
308+
Optional<State> state =
309+
workflow.getStates().stream().filter(s -> s.getName().equals(name)).findFirst();
310+
311+
if (state.isPresent()) {
312+
return state.get();
313+
} else {
314+
return null;
315+
}
316+
}
317+
296318
public static long getNumOfEndStates(Workflow workflow) {
297319
if (hasStates(workflow)) {
298320
long count = workflow.getStates().stream().filter(state -> state.getEnd() != null).count();

utils/src/test/java/io/serverlessworkflow/util/GetStatesTest.java

+16
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.serverlessworkflow.api.Workflow;
2222
import io.serverlessworkflow.api.interfaces.State;
2323
import io.serverlessworkflow.api.states.DefaultState;
24+
import io.serverlessworkflow.api.states.EventState;
2425
import io.serverlessworkflow.util.testutil.TestUtils;
2526
import io.serverlessworkflow.utils.WorkflowUtils;
2627
import java.util.List;
@@ -42,6 +43,21 @@ public void testGetStatesByDefaultState(String workflowWithState) {
4243
assertEquals(notMatchingEvents, notMatchingStates.size());
4344
}
4445

46+
@ParameterizedTest
47+
@ValueSource(strings = {"/getStates/workflowwithstates.yml"})
48+
public void testGetStateByName(String workflowWithState) {
49+
Workflow workflow = TestUtils.createWorkflowFromTestResource(workflowWithState);
50+
51+
State finalizeApplicationState =
52+
WorkflowUtils.getStateWithName(workflow, "FinalizeApplication");
53+
assertNotNull(finalizeApplicationState);
54+
assertTrue(finalizeApplicationState instanceof EventState);
55+
56+
State cancelApplicationState = WorkflowUtils.getStateWithName(workflow, "CancelApplication");
57+
assertNotNull(cancelApplicationState);
58+
assertTrue(cancelApplicationState instanceof EventState);
59+
}
60+
4561
@Test
4662
public void testGetsStatesForNullWorkflow() {
4763
assertNull(WorkflowUtils.getStates(null, DefaultState.Type.EVENT));

0 commit comments

Comments
 (0)