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

Reply via email to