You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2015/05/29 19:22:05 UTC
[12/27] incubator-brooklyn git commit: Adds support for
${attribute['attribute.name']} sensor access in freemarker templates
Adds support for ${attribute['attribute.name']} sensor access in freemarker templates
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/176eed3e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/176eed3e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/176eed3e
Branch: refs/heads/master
Commit: 176eed3e6e4184b74577f2fd6e29f539ad2650ad
Parents: c9bde14
Author: Martin Harris <gi...@nakomis.com>
Authored: Wed Apr 15 16:13:53 2015 +0100
Committer: Richard Downer <ri...@apache.org>
Committed: Thu May 28 17:27:34 2015 +0100
----------------------------------------------------------------------
.../brooklyn/util/text/TemplateProcessor.java | 41 ++++++++++++++++++++
1 file changed, 41 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/176eed3e/core/src/main/java/brooklyn/util/text/TemplateProcessor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/text/TemplateProcessor.java b/core/src/main/java/brooklyn/util/text/TemplateProcessor.java
index 9f30c88..307b92a 100644
--- a/core/src/main/java/brooklyn/util/text/TemplateProcessor.java
+++ b/core/src/main/java/brooklyn/util/text/TemplateProcessor.java
@@ -30,8 +30,12 @@ import org.slf4j.LoggerFactory;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.ConfigKeys;
+import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.drivers.EntityDriver;
+import brooklyn.event.AttributeSensor;
+import brooklyn.event.basic.DependentConfiguration;
+import brooklyn.event.basic.Sensors;
import brooklyn.location.Location;
import brooklyn.management.ManagementContext;
import brooklyn.management.internal.ManagementContextInternal;
@@ -225,6 +229,40 @@ public class TemplateProcessor {
}
}
+ protected final static class EntityAttributeTemplateModel implements TemplateHashModel {
+ protected final EntityInternal entity;
+
+ protected EntityAttributeTemplateModel(EntityInternal entity) {
+ this.entity = entity;
+ }
+
+ @Override
+ public boolean isEmpty() throws TemplateModelException {
+ return false;
+ }
+
+ @Override
+ public TemplateModel get(String key) throws TemplateModelException {
+ Object result;
+ try {
+ result = Entities.submit(entity, DependentConfiguration.attributeWhenReady(entity,
+ Sensors.builder(Object.class, key).persistence(AttributeSensor.SensorPersistenceMode.NONE).build())).get();
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+ if (result == null) {
+ return null;
+ } else {
+ return wrapAsTemplateModel(result);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getName()+"["+entity+"]";
+ }
+ }
+
/**
* Provides access to config on an entity or management context, using
* <code>${config['entity.config.key']}</code> or <code>${mgmt['brooklyn.properties.key']}</code> notation,
@@ -287,6 +325,9 @@ public class TemplateProcessor {
if (entity!=null)
return wrapAsTemplateModel( Iterables.getOnlyElement( entity.getLocations() ) );
}
+ if ("attribute".equals(key)) {
+ return new EntityAttributeTemplateModel(entity);
+ }
if (mgmt!=null) {
// TODO deprecated in 0.7.0, remove after next version