From 42ff0355166cd7661c6db9281f64b512b8af5dc0 Mon Sep 17 00:00:00 2001 From: Andrew Donald Kennedy Date: Tue, 11 Apr 2017 21:22:44 +0100 Subject: [PATCH] Use config key builder for composite effectors --- .../effector/composite/ChoiceEffector.java | 35 +++++++++++-------- .../effector/composite/ComposeEffector.java | 12 ++++--- .../core/effector/composite/LoopEffector.java | 17 +++++---- .../effector/composite/ParallelEffector.java | 12 ++++--- .../effector/composite/RepeatEffector.java | 23 +++++++----- .../effector/composite/ReplaceEffector.java | 22 ++++++------ .../effector/composite/SequenceEffector.java | 12 ++++--- .../effector/composite/TransformEffector.java | 19 +++++----- ...nvokeEffectorOnCollectionSensorChange.java | 6 ++-- 9 files changed, 91 insertions(+), 67 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/composite/ChoiceEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/composite/ChoiceEffector.java index 563a0381236..12dd9e54e2f 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/composite/ChoiceEffector.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/composite/ChoiceEffector.java @@ -35,6 +35,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; /** * Execute an effector, and depending on the result, execute either @@ -47,24 +48,27 @@ public class ChoiceEffector extends AbstractCompositeEffector { private static final Logger LOG = LoggerFactory.getLogger(ChoiceEffector.class); - public static final ConfigKey INPUT = ConfigKeys.newStringConfigKey( - "input", - "Choice input parameter"); + public static final ConfigKey INPUT = ConfigKeys.builder(String.class) + .name("input") + .description("Choice input parameter") + .build(); - public static final ConfigKey CHOICE = ConfigKeys.newConfigKey( - Object.class, - "choice", - "Effector details for the choice effector"); + public static final ConfigKey CHOICE = ConfigKeys.builder(Object.class) + .name("choice") + .description("Effector details for the choice effector") + .constraint(Predicates.notNull()) + .build(); - public static final ConfigKey SUCCESS = ConfigKeys.newConfigKey( - Object.class, - "success", - "Effector details for the success effector"); + public static final ConfigKey SUCCESS = ConfigKeys.builder(Object.class) + .name("success") + .description("Effector details for the success effector") + .constraint(Predicates.notNull()) + .build(); - public static final ConfigKey FAILURE = ConfigKeys.newConfigKey( - Object.class, - "failure", - "Effector details for the failure effector"); + public static final ConfigKey FAILURE = ConfigKeys.builder(Object.class) + .name("failure") + .description("Effector details for the failure effector") + .build(); public ChoiceEffector(ConfigBag params) { super(newEffectorBuilder(params).build()); @@ -109,6 +113,7 @@ public Object call(final ConfigBag params) { Object output = invokeEffectorNamed(choiceTargetEntity, choiceEffectorName, params); Boolean success = Boolean.parseBoolean(Strings.toString(output)); + LOG.debug("{} result of {} was {}/{}", new Object[] { this, choiceEffectorName, Strings.toString(output), success }); Object effectorDetails = EntityInitializers.resolve(config, success ? SUCCESS : FAILURE); diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/composite/ComposeEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/composite/ComposeEffector.java index 8a6c4890688..09e39166c83 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/composite/ComposeEffector.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/composite/ComposeEffector.java @@ -35,6 +35,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.reflect.TypeToken; @@ -49,11 +50,12 @@ public class ComposeEffector extends AbstractCompositeEffector { private static final Logger LOG = LoggerFactory.getLogger(ComposeEffector.class); - public static final ConfigKey> COMPOSE = ConfigKeys.newConfigKey( - new TypeToken>() { }, - "compose", - "Effector details list for the compose effector", - ImmutableList.of()); + public static final ConfigKey> COMPOSE = ConfigKeys.builder(new TypeToken>() { }) + .name("compose") + .description("Effector details list for the compose effector") + .constraint(Predicates.notNull()) + .defaultValue(ImmutableList.of()) + .build(); public ComposeEffector(ConfigBag params) { super(newEffectorBuilder(params).build()); diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/composite/LoopEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/composite/LoopEffector.java index 9d5860867a6..58bdc310ee4 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/composite/LoopEffector.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/composite/LoopEffector.java @@ -37,6 +37,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -51,14 +52,16 @@ public class LoopEffector extends AbstractCompositeEffector { private static final Logger LOG = LoggerFactory.getLogger(LoopEffector.class); - public static final ConfigKey INPUT = ConfigKeys.newStringConfigKey( - "input", - "Loop input parameter"); + public static final ConfigKey INPUT = ConfigKeys.builder(String.class) + .name("input") + .description("Loop input parameter") + .build(); - public static final ConfigKey LOOP = ConfigKeys.newConfigKey( - Object.class, - "loop", - "Effector details for the loop effector"); + public static final ConfigKey LOOP = ConfigKeys.builder(Object.class) + .name("loop") + .description("Effector details for the loop effector") + .constraint(Predicates.notNull()) + .build(); public LoopEffector(ConfigBag params) { super(newEffectorBuilder(params).build()); diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/composite/ParallelEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/composite/ParallelEffector.java index b1b73e4d074..cfe5ca2c5df 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/composite/ParallelEffector.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/composite/ParallelEffector.java @@ -36,6 +36,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.reflect.TypeToken; @@ -50,11 +51,12 @@ public class ParallelEffector extends AbstractCompositeEffector { private static final Logger LOG = LoggerFactory.getLogger(ParallelEffector.class); - public static final ConfigKey> PARALLEL = ConfigKeys.newConfigKey( - new TypeToken>() { }, - "parallel", - "Effector details list for the parallel effector", - ImmutableList.of()); + public static final ConfigKey> PARALLEL = ConfigKeys.builder(new TypeToken>() { }) + .name("parallel") + .description("Effector details list for the parallel effector") + .constraint(Predicates.notNull()) + .defaultValue(ImmutableList.of()) + .build(); public ParallelEffector(ConfigBag params) { super(newEffectorBuilder(params).build()); diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/composite/RepeatEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/composite/RepeatEffector.java index 35515cfe0d9..faa55ff0418 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/composite/RepeatEffector.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/composite/RepeatEffector.java @@ -30,11 +30,13 @@ import org.apache.brooklyn.core.effector.Effectors.EffectorBuilder; import org.apache.brooklyn.core.entity.EntityInitializers; import org.apache.brooklyn.util.core.config.ConfigBag; +import org.apache.brooklyn.util.math.MathPredicates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -48,15 +50,18 @@ public class RepeatEffector extends AbstractCompositeEffector { private static final Logger LOG = LoggerFactory.getLogger(RepeatEffector.class); - public static final ConfigKey REPEAT = ConfigKeys.newConfigKey( - Object.class, - "repeat", - "Effector details list for the repeat effector"); + public static final ConfigKey REPEAT = ConfigKeys.builder(Object.class) + .name("repeat") + .description("Effector details list for the repeat effector") + .constraint(Predicates.notNull()) + .build(); - public static final ConfigKey COUNT = ConfigKeys.newIntegerConfigKey( - "count", - "Number of times to rpeat the effector", - 1); + public static final ConfigKey COUNT = ConfigKeys.builder(Integer.class) + .name("count") + .description("Number of times to repeat the effector") + .constraint(MathPredicates.greaterThan(0d)) + .defaultValue(1) + .build(); public RepeatEffector(ConfigBag params) { super(newEffectorBuilder(params).build()); @@ -85,7 +90,7 @@ public List call(final ConfigBag params) { synchronized (mutex) { LOG.debug("{} called with config {}, params {}", new Object[] { this, config, params }); Object effectorDetails = EntityInitializers.resolve(config, REPEAT); - int count = EntityInitializers.resolve(config, COUNT); + Integer count = EntityInitializers.resolve(config, COUNT); String effectorName = getEffectorName(effectorDetails); String inputArgument = getInputArgument(effectorDetails); diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/composite/ReplaceEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/composite/ReplaceEffector.java index f14774a4019..54e3aec5304 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/composite/ReplaceEffector.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/composite/ReplaceEffector.java @@ -38,6 +38,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; /** * Replace an effector with another, optionally executing the originsl @@ -59,16 +60,17 @@ public enum ReplaceAction { public static final String ORIGINAL = "original-"; - public static final ConfigKey ACTION = ConfigKeys.newConfigKey( - ReplaceAction.class, - "action", - "Action to take with the replaced effector", - ReplaceAction.OVERRIDE); - - public static final ConfigKey REPLACE = ConfigKeys.newConfigKey( - Object.class, - "replace", - "Effector details for the replace effector"); + public static final ConfigKey ACTION = ConfigKeys.builder(ReplaceAction.class) + .name("action") + .description("Action to take with the replaced effector") + .defaultValue(ReplaceAction.OVERRIDE) + .build(); + + public static final ConfigKey REPLACE = ConfigKeys.builder(Object.class) + .name("replace") + .description("Effector details for the replace effector") + .constraint(Predicates.notNull()) + .build(); public ReplaceEffector(ConfigBag params) { super(newEffectorBuilder(params).build()); diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/composite/SequenceEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/composite/SequenceEffector.java index e7a0afb4866..0dc1ee02ce5 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/composite/SequenceEffector.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/composite/SequenceEffector.java @@ -35,6 +35,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.reflect.TypeToken; @@ -48,11 +49,12 @@ public class SequenceEffector extends AbstractCompositeEffector { private static final Logger LOG = LoggerFactory.getLogger(SequenceEffector.class); - public static final ConfigKey> SEQUENCE = ConfigKeys.newConfigKey( - new TypeToken>() { }, - "sequence", - "Effector details list for the sequence effector", - ImmutableList.of()); + public static final ConfigKey> SEQUENCE = ConfigKeys.builder(new TypeToken>() { }) + .name("sequence") + .description("Effector details list for the sequence effector") + .constraint(Predicates.notNull()) + .defaultValue(ImmutableList.of()) + .build(); public SequenceEffector(ConfigBag params) { super(newEffectorBuilder(params).build()); diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/composite/TransformEffector.java b/core/src/main/java/org/apache/brooklyn/core/effector/composite/TransformEffector.java index df07aa58a75..b3bd55b3e66 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/composite/TransformEffector.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/composite/TransformEffector.java @@ -35,6 +35,7 @@ import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; import com.google.common.reflect.TypeToken; /** @@ -47,15 +48,17 @@ public class TransformEffector extends AbstractCompositeEffector { private static final Logger LOG = LoggerFactory.getLogger(TransformEffector.class); - public static final ConfigKey INPUT = ConfigKeys.newStringConfigKey( - "input", - "Transformer input parameter"); + public static final ConfigKey INPUT = ConfigKeys.builder(String.class) + .name("input") + .description("Transformer input parameter") + .build(); - public static final ConfigKey> FUNCTION = ConfigKeys.newConfigKey( - new TypeToken>() { }, - "function", - "Transformer function to apply", - Functions.identity()); + public static final ConfigKey> FUNCTION = ConfigKeys.builder(new TypeToken>() { }) + .name("function") + .description("Transformer function to apply") + .constraint(Predicates.notNull()) + .defaultValue(Functions.identity()) + .build(); public TransformEffector(ConfigBag params) { super(newEffectorBuilder(params).build()); diff --git a/core/src/main/java/org/apache/brooklyn/policy/InvokeEffectorOnCollectionSensorChange.java b/core/src/main/java/org/apache/brooklyn/policy/InvokeEffectorOnCollectionSensorChange.java index 352d40d13df..8352245cb9e 100644 --- a/core/src/main/java/org/apache/brooklyn/policy/InvokeEffectorOnCollectionSensorChange.java +++ b/core/src/main/java/org/apache/brooklyn/policy/InvokeEffectorOnCollectionSensorChange.java @@ -159,14 +159,14 @@ public void onEvent(SensorEvent> event) { } private void onAdded(Object newElement) { - onEvent(getOnAddedEffector(), newElement); + invokeEffector(getOnAddedEffector(), newElement); } private void onRemoved(Object newElement) { - onEvent(getOnRemovedEffector(), newElement); + invokeEffector(getOnRemovedEffector(), newElement); } - private void onEvent(String effectorName, Object parameter) { + private void invokeEffector(String effectorName, Object parameter) { Maybe> effector = getEffector(effectorName); if (effector.isPresentAndNonNull()) { final Map parameters;