expand string-to-sensor coercion to make sensors easier to write in yaml
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/e9daca7d Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/e9daca7d Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/e9daca7d Branch: refs/heads/master Commit: e9daca7d0c311732d4c83cf9c6e52e2e2f9c3bc3 Parents: 0818fd2 Author: Alex Heneveld <[email protected]> Authored: Sun Jun 21 11:58:50 2015 -0700 Committer: Alex Heneveld <[email protected]> Committed: Wed Jun 24 00:40:33 2015 -0700 ---------------------------------------------------------------------- .../brooklyn/enricher/basic/Propagator.java | 5 ++- .../java/brooklyn/util/flags/TypeCoercions.java | 32 ++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e9daca7d/core/src/main/java/brooklyn/enricher/basic/Propagator.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/enricher/basic/Propagator.java b/core/src/main/java/brooklyn/enricher/basic/Propagator.java index 7d6e383..86795c6 100644 --- a/core/src/main/java/brooklyn/enricher/basic/Propagator.java +++ b/core/src/main/java/brooklyn/enricher/basic/Propagator.java @@ -36,6 +36,8 @@ import brooklyn.event.SensorEvent; import brooklyn.event.SensorEventListener; import brooklyn.util.collections.MutableMap; import brooklyn.util.flags.SetFromFlag; +import brooklyn.util.task.Tasks; +import brooklyn.util.time.Duration; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; @@ -93,7 +95,8 @@ public class Propagator extends AbstractEnricher implements SensorEventListener< throw new IllegalStateException("Propagator enricher "+this+" must not have 'propagating' set at same time as either 'propagatingAll' or 'propagatingAllBut'"); } - for (Sensor<?> sensor : getConfig(PROPAGATING)) { + for (Object sensorO : getConfig(PROPAGATING)) { + Sensor<?> sensor = Tasks.resolving(sensorO).as(Sensor.class).timeout(Duration.millis(50)).context(producer).get(); if (!sensorMappingTemp.containsKey(sensor)) { sensorMappingTemp.put(sensor, sensor); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e9daca7d/core/src/main/java/brooklyn/util/flags/TypeCoercions.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/util/flags/TypeCoercions.java b/core/src/main/java/brooklyn/util/flags/TypeCoercions.java index 55649e8..c2876bd 100644 --- a/core/src/main/java/brooklyn/util/flags/TypeCoercions.java +++ b/core/src/main/java/brooklyn/util/flags/TypeCoercions.java @@ -45,11 +45,14 @@ import javax.annotation.concurrent.GuardedBy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import brooklyn.entity.Entity; +import brooklyn.entity.basic.BrooklynTaskTags; import brooklyn.entity.basic.ClosureEntityFactory; import brooklyn.entity.basic.ConfigurableEntityFactory; import brooklyn.entity.basic.ConfigurableEntityFactoryFromEntityFactory; import brooklyn.event.AttributeSensor; -import brooklyn.event.basic.BasicAttributeSensor; +import brooklyn.event.Sensor; +import brooklyn.event.basic.Sensors; import brooklyn.internal.BrooklynInitialization; import brooklyn.util.JavaGroovyEquivalents; import brooklyn.util.collections.MutableSet; @@ -61,6 +64,7 @@ import brooklyn.util.javalang.Enums; import brooklyn.util.net.Cidr; import brooklyn.util.net.Networking; import brooklyn.util.net.UserAndHostAndPort; +import brooklyn.util.task.Tasks; import brooklyn.util.text.StringEscapes.JavaStringEscapes; import brooklyn.util.text.Strings; import brooklyn.util.time.Duration; @@ -723,7 +727,31 @@ public class TypeCoercions { registerAdapter(String.class, AttributeSensor.class, new Function<String,AttributeSensor>() { @Override public AttributeSensor apply(final String input) { - return new BasicAttributeSensor<Object>(Object.class, input); + Entity entity = BrooklynTaskTags.getContextEntity(Tasks.current()); + if (entity!=null) { + Sensor<?> result = null; + if (entity!=null) { + result = entity.getEntityType().getSensor(input); + if (result instanceof AttributeSensor) + return (AttributeSensor) result; + } + } + return Sensors.newSensor(Object.class, input); + } + }); + registerAdapter(String.class, Sensor.class, new Function<String,Sensor>() { + @Override + public AttributeSensor apply(final String input) { + Entity entity = BrooklynTaskTags.getContextEntity(Tasks.current()); + if (entity!=null) { + Sensor<?> result = null; + if (entity!=null) { + result = entity.getEntityType().getSensor(input); + if (result != null) + return (AttributeSensor) result; + } + } + return Sensors.newSensor(Object.class, input); } }); registerAdapter(String.class, List.class, new Function<String,List>() {
