This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit 4c62cf7e9863b20589d918aabe34f03eeb4d8fc4 Author: Alex Heneveld <[email protected]> AuthorDate: Wed May 17 11:39:25 2023 +0100 expand what we can compare in workflow, include time, duration, doubles, etc --- .../brooklyn/camp/brooklyn/WorkflowYamlTest.java | 13 +++++++++++-- .../steps/variables/SetVariableWorkflowStep.java | 18 +++++++----------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java index 361bd08179..59c4a3597d 100644 --- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java +++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java @@ -1108,20 +1108,29 @@ public class WorkflowYamlTest extends AbstractYamlTest { " brooklyn.config:", " name: post-init", " steps:", - " - let instant x = ${workflow.util.now_iso}", + " - let x = ${workflow.util.now_instant}", " - let duration y = 7 days", " - let in_a_week = ${x} + ${y}", + " - step: set-sensor boolean condition_works = true", + " condition:", + " target: ${in_a_week}", + " greater-than: ${workflow.util.now_instant}", " - set-sensor in_a_week = ${in_a_week}", + " - \"let is_in_a_week = ${in_a_week} > ${workflow.util.now_instant} ? yes : no\"", + " - set-sensor is_in_a_week = ${is_in_a_week}", ""); waitForApplicationTasks(app); Entity entity = Iterables.getOnlyElement(app.getChildren()); - EntityAsserts.assertAttributeEventually(entity, Sensors.newSensor(Object.class, "in_a_week"), v -> v!=null); + EntityAsserts.assertAttributeEventually(entity, Sensors.newSensor(Object.class, "is_in_a_week"), v -> v!=null); Object inAWeek = entity.sensors().get(Sensors.newSensor(Object.class, "in_a_week")); Asserts.assertInstanceOf(inAWeek, Instant.class); Asserts.assertThat((Instant)inAWeek, t -> t.isAfter(Instant.now().plus(6, ChronoUnit.DAYS))); Asserts.assertThat((Instant)inAWeek, t -> t.isBefore(Instant.now().plus(8, ChronoUnit.DAYS))); + + EntityAsserts.assertAttributeEquals(entity, Sensors.newSensor(Boolean.class, "condition_works"), true); + EntityAsserts.assertAttributeEquals(entity, Sensors.newSensor(String.class, "is_in_a_week"), "yes"); } @Test diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/SetVariableWorkflowStep.java b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/SetVariableWorkflowStep.java index e2ff30d695..3e84563740 100644 --- a/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/SetVariableWorkflowStep.java +++ b/core/src/main/java/org/apache/brooklyn/core/workflow/steps/variables/SetVariableWorkflowStep.java @@ -28,6 +28,7 @@ import org.apache.brooklyn.core.workflow.WorkflowStepDefinition; import org.apache.brooklyn.core.workflow.WorkflowStepInstanceExecutionContext; import org.apache.brooklyn.util.collections.*; import org.apache.brooklyn.util.core.flags.TypeCoercions; +import org.apache.brooklyn.util.core.predicates.DslPredicates; import org.apache.brooklyn.util.core.text.TemplateProcessor; import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.guava.Maybe; @@ -411,16 +412,11 @@ public class SetVariableWorkflowStep extends WorkflowStepDefinition { throw new IllegalArgumentException("Should not come here"); } - Object applyIntegerToBooleanOperator(List<String> lhs0, List<String> rhs0, BiFunction<Integer, Integer, Boolean> biFn) { + Object applyComparison(List<String> lhs0, List<String> rhs0, Function<Integer, Boolean> test) { Object lhs = process(lhs0, null); Object rhs = process(rhs0, null); - Maybe<Integer> lhsB = asInteger(lhs); - Maybe<Integer> rhsB = asInteger(rhs); - if (lhsB.isPresent() && rhsB.isPresent()) { - return biFn.apply(lhsB.get(), rhsB.get()); - } - throw new IllegalArgumentException("Should not come here"); + return DslPredicates.coercedCompare(lhs, rhs, test); } Maybe<Boolean> asBoolean(Object x) { @@ -456,19 +452,19 @@ public class SetVariableWorkflowStep extends WorkflowStepDefinition { } Object handleOrderedGreaterThan(List<String> lhs, List<String> rhs) { - return applyIntegerToBooleanOperator(lhs, rhs, (a, b) -> a > b); + return applyComparison(lhs, rhs, v -> v>0); } Object handleOrderedGreaterThanOrEqual(List<String> lhs, List<String> rhs) { - return applyIntegerToBooleanOperator(lhs, rhs, (a, b) -> a >= b); + return applyComparison(lhs, rhs, v -> v>=0); } Object handleOrderedLessThan(List<String> lhs, List<String> rhs) { - return applyIntegerToBooleanOperator(lhs, rhs, (a, b) -> a < b); + return applyComparison(lhs, rhs, v -> v<0); } Object handleOrderedLessThanOrEqual(List<String> lhs, List<String> rhs) { - return applyIntegerToBooleanOperator(lhs, rhs, (a, b) -> a <= b); + return applyComparison(lhs, rhs, v -> v<=0); } Object handleTernaryCondition(List<String> lhs0, List<String> rhs0) {
