Save location information as sensor data on LocationEntity

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6615ddf7
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6615ddf7
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6615ddf7

Branch: refs/heads/master
Commit: 6615ddf70d63a7c71e93d6b25a7987ca269b2f02
Parents: b119889
Author: Andrew Donald Kennedy <[email protected]>
Authored: Fri Nov 11 12:17:25 2016 +0000
Committer: Andrew Donald Kennedy <[email protected]>
Committed: Tue Nov 22 13:52:15 2016 +0000

----------------------------------------------------------------------
 .../org/apache/brooklyn/entity/stock/LocationEntity.java  | 10 ++++++++++
 .../apache/brooklyn/entity/stock/LocationEntityImpl.java  |  3 +++
 2 files changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6615ddf7/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntity.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntity.java 
b/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntity.java
index 4e8cfd1..9a72bee 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntity.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntity.java
@@ -20,6 +20,7 @@ package org.apache.brooklyn.entity.stock;
 
 import java.util.Collection;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
@@ -39,6 +40,10 @@ import com.google.common.reflect.TypeToken;
  * <p>
  * Can use the class name of the {@link MachineProvisioningLocation} or the 
value of the
  * {@code provider} or {@code iso3166} configuration keys on the provisioning 
location.
+ * The values used to make the decision are set as sensors on this entity. The 
decision
+ * is made based on the first match found, checking the class name first, then 
the
+ * provider and finally the country codes, and map keys representing any or 
all of these
+ * can be used at the same time.
  * <pre>
  * - type: org.apache.brooklyn.entity.stock.LocationEntity
  *   brooklyn.config:
@@ -74,6 +79,11 @@ public interface LocationEntity extends BasicStartable {
     ConfigKey<Collection<AttributeSensor<?>>> LOCATION_ENTITY_SENSOR_LIST = 
ConfigKeys.newConfigKey(new TypeToken<Collection<AttributeSensor<?>>>() { },
             "location.entity.sensors", "Collection of sensors that are to be 
propagated from the child entity (all usual sensors if not set, or empty)");
 
+    AttributeSensor<String> LOCATION_TYPE = 
Sensors.newStringSensor("location.entity.type", "The class name of the entity 
location");
+    AttributeSensor<String> LOCATION_PROVIDER = 
Sensors.newStringSensor("location.entity.provider", "The provider name for the 
entity location");
+    AttributeSensor<Set<String>> LOCATION_COUNTRY_CODES = 
Sensors.newSensor(new TypeToken<Set<String>>() { },
+            "location.entity.countryCode", "The ISO 3166 country codes for the 
entity location");
+
     AttributeSensor<Entity> LOCATION_ENTITY = Sensors.newSensor(Entity.class,
             "location.entity", "The created entity");
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6615ddf7/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntityImpl.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntityImpl.java 
b/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntityImpl.java
index 95c9efa..fbfcdc5 100644
--- 
a/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntityImpl.java
+++ 
b/core/src/main/java/org/apache/brooklyn/entity/stock/LocationEntityImpl.java
@@ -100,6 +100,9 @@ public class LocationEntityImpl extends BasicStartableImpl 
implements LocationEn
                 String locationType = provisioner.getClass().getSimpleName();
                 String provider = 
provisioner.config().get(LocationConfigKeys.CLOUD_PROVIDER);
                 Set<String> countryCodes = 
MutableSet.copyOf(provisioner.config().get(LocationConfigKeys.ISO_3166));
+                sensors().set(LOCATION_TYPE, locationType);
+                sensors().set(LOCATION_PROVIDER, provider);
+                sensors().set(LOCATION_COUNTRY_CODES, countryCodes);
                 EntitySpec<?> spec = specMap.get(DEFAULT);
                 if (specMap.containsKey(locationType)) {
                     LOG.debug("Matched location type {} for entity: {}", 
locationType, this);

Reply via email to