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) {

Reply via email to