From 3b5cc96f4942520676f5e74f98a7c9ae7ba885c7 Mon Sep 17 00:00:00 2001 From: Robert McNees Date: Thu, 30 Nov 2023 13:06:38 -0500 Subject: [PATCH] Updated documentation and added unit tests for flow builder priority --- .../DefaultStateTransitionComparator.java | 2 +- .../core/job/builder/FlowJobBuilderTests.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/DefaultStateTransitionComparator.java b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/DefaultStateTransitionComparator.java index 1d43ccc1ac..7b402ffa9e 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/DefaultStateTransitionComparator.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/job/flow/support/DefaultStateTransitionComparator.java @@ -20,7 +20,7 @@ import java.util.Comparator; /** - * Sorts by decreasing specificity of pattern, based on just counting wildcards (with * + * Sorts by ascending specificity of pattern, based on just counting wildcards (with * * taking precedence over ?). If wildcard counts are equal then falls back to alphabetic * comparison. Hence * > foo* > ??? > fo? > foo. * diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java index 14e61a58a0..f5c9996294 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java @@ -262,6 +262,36 @@ public FlowExecutionStatus decide(JobExecution jobExecution, @Nullable StepExecu assertEquals(1, execution.getStepExecutions().size()); } + @Test + void testBuildWithDeciderPriority() { + JobExecutionDecider decider = (jobExecution, stepExecution) -> new FlowExecutionStatus("COMPLETED_PARTIALLY"); + JobFlowBuilder builder = new JobBuilder("flow_priority", jobRepository).start(decider); + builder.on("COMPLETED_PARTIALLY").end(); + builder.on("COMPLETED*").fail(); + builder.build().preventRestart().build().execute(execution); + assertEquals(BatchStatus.COMPLETED, execution.getStatus()); + } + + @Test + void testBuildWithWildcardDeciderPriority() { + JobExecutionDecider decider = (jobExecution, stepExecution) -> new FlowExecutionStatus("COMPLETED_PARTIALLY"); + JobFlowBuilder builder = new JobBuilder("flow_priority", jobRepository).start(decider); + builder.on("COMPLETED_?ARTIALLY").end(); + builder.on("COMPLETED_*ARTIALLY").fail(); + builder.build().preventRestart().build().execute(execution); + assertEquals(BatchStatus.COMPLETED, execution.getStatus()); + } + + @Test + void testBuildWithDeciderPrioritySubstringAndWildcard() { + JobExecutionDecider decider = (jobExecution, stepExecution) -> new FlowExecutionStatus("CONTINUABLE"); + JobFlowBuilder builder = new JobBuilder("flow_priority", jobRepository).start(decider); + builder.on("CONTINUABLE").end(); + builder.on("CONTIN*").fail(); + builder.build().preventRestart().build().execute(execution); + assertEquals(BatchStatus.COMPLETED, execution.getStatus()); + } + @Test void testBuildWithIntermediateSimpleJob() { SimpleJobBuilder builder = new JobBuilder("flow", jobRepository).start(step1);