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/02/18 12:32:06 UTC

[1/9] incubator-brooklyn git commit: Add BrooklynObject.config()

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 6c72bd4c7 -> 1d1cfe713


Add BrooklynObject.config()

- With separate implementations for Entity, Location and
  AbstractEntityAdjunct.
- CatalogItemDo / CatalogItemDtoAbstract throw UnsupportedOperationException


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/4c233de5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/4c233de5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/4c233de5

Branch: refs/heads/master
Commit: 4c233de5c43328e22c044c710cbc87c886c60e82
Parents: 6c72bd4
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 10 19:05:53 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 18 11:02:34 2015 +0000

----------------------------------------------------------------------
 .../java/brooklyn/basic/BrooklynObject.java     |  55 +++-
 api/src/main/java/brooklyn/entity/Entity.java   |  26 +-
 .../java/brooklyn/entity/basic/EntityLocal.java |  18 +-
 .../brooklyn/basic/BrooklynObjectInternal.java  |  62 ++++
 .../catalog/internal/CatalogItemDo.java         |   8 +
 .../internal/CatalogItemDtoAbstract.java        |   8 +
 .../brooklyn/entity/basic/AbstractEntity.java   | 280 ++++++++++++++-----
 .../brooklyn/entity/basic/EntityInternal.java   |  23 +-
 .../location/basic/AbstractLocation.java        | 140 ++++++++--
 .../policy/basic/AbstractEntityAdjunct.java     | 113 +++++++-
 .../brooklyn/policy/basic/ConfigMapImpl.java    |   7 +
 11 files changed, 627 insertions(+), 113 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/api/src/main/java/brooklyn/basic/BrooklynObject.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/basic/BrooklynObject.java b/api/src/main/java/brooklyn/basic/BrooklynObject.java
index 4698780..798d454 100644
--- a/api/src/main/java/brooklyn/basic/BrooklynObject.java
+++ b/api/src/main/java/brooklyn/basic/BrooklynObject.java
@@ -22,8 +22,12 @@ import java.util.Set;
 
 import javax.annotation.Nonnull;
 
+import brooklyn.config.ConfigKey;
+import brooklyn.config.ConfigKey.HasConfigKey;
 import brooklyn.entity.trait.Identifiable;
+import brooklyn.management.Task;
 
+import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableMap;
 
 /**
@@ -63,7 +67,9 @@ public interface BrooklynObject extends Identifiable {
     @Deprecated
     TagSupport getTagSupport();
     
-    public static interface TagSupport {
+    ConfigurationSupport config();
+    
+    public interface TagSupport {
         /**
          * @return An immutable copy of the set of tags on this entity. 
          * Note {@link #containsTag(Object)} will be more efficient,
@@ -80,4 +86,51 @@ public interface BrooklynObject extends Identifiable {
         boolean removeTag(@Nonnull Object tag);
     }
 
+    @Beta
+    public interface ConfigurationSupport {
+
+        /**
+         * Gets the given configuration value for this entity, in the following order of preference:
+         * <ol>
+         *   <li> value (including null) explicitly set on the entity
+         *   <li> value (including null) explicitly set on an ancestor (inherited)
+         *   <li> a default value (including null) on the best equivalent static key of the same name declared on the entity
+         *        (where best equivalence is defined as preferring a config key which extends another, 
+         *        as computed in EntityDynamicType.getConfigKeys)
+         *   <li> a default value (including null) on the key itself
+         *   <li> null
+         * </ol>
+         */
+        <T> T get(ConfigKey<T> key);
+        
+        /**
+         * @see {@link #getConfig(ConfigKey)}
+         */
+        <T> T get(HasConfigKey<T> key);
+
+        /**
+         * Sets the config to the given value.
+         */
+        <T> T set(ConfigKey<T> key, T val);
+        
+        /**
+         * @see {@link #setConfig(HasConfigKey, Object)}
+         */
+        <T> T set(HasConfigKey<T> key, T val);
+        
+        /**
+         * Sets the config to the value returned by the task.
+         * 
+         * Returns immediately without blocking; subsequent calls to {@link #getConfig(ConfigKey)} 
+         * will execute the task, and block until the task completes.
+         * 
+         * @see {@link #setConfig(ConfigKey, Object)}
+         */
+        <T> T set(ConfigKey<T> key, Task<T> val);
+        
+        /**
+         * @see {@link #setConfig(ConfigKey, Task)}
+         */
+        <T> T set(HasConfigKey<T> key, Task<T> val);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/api/src/main/java/brooklyn/entity/Entity.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/Entity.java b/api/src/main/java/brooklyn/entity/Entity.java
index 27b902d..0d45a35 100644
--- a/api/src/main/java/brooklyn/entity/Entity.java
+++ b/api/src/main/java/brooklyn/entity/Entity.java
@@ -194,24 +194,32 @@ public interface Entity extends BrooklynObject {
     <T> T getAttribute(AttributeSensor<T> sensor);
 
     /**
-     * Gets the given configuration value for this entity, in the following order of preference:
-     * <li> value (including null) explicitly set on the entity
-     * <li> value (including null) explicitly set on an ancestor (inherited)
-     * <li> a default value (including null) on the best equivalent static key of the same name declared on the entity
-     *      (where best equivalence is defined as preferring a config key which extends another, 
-     *      as computed in EntityDynamicType.getConfigKeys)
-     * <li> a default value (including null) on the key itself
-     * <li> null
+     * Convenience for calling {@link ConfigurationSupport#getConfig(ConfigKey)},
+     * via code like {@code config().get(key)}.
      */
     <T> T getConfig(ConfigKey<T> key);
-    <T> T getConfig(HasConfigKey<T> key);
     
+    /**
+     * @see #getConfig(ConfigKey)}
+     */
+    <T> T getConfig(HasConfigKey<T> key);
     
     /**
      * Returns the uncoerced value for this config key as set on this entity, if available,
      * not following any inheritance chains and not taking any default.
+     * 
+     * @deprecated since 0.7.0; use {@code ((EntityInternal)entity).config().getRaw()} or
+     *             {@code ((EntityInternal)entity).config().getLocalRaw()}
      */
+    @Deprecated
     Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited);
+    
+    /**
+     * @see {@link #getConfigRaw(ConfigKey, boolean)}.
+     * 
+     * @deprecated since 0.7.0
+     */
+    @Deprecated
     Maybe<Object> getConfigRaw(HasConfigKey<?> key, boolean includeInherited);
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/api/src/main/java/brooklyn/entity/basic/EntityLocal.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/basic/EntityLocal.java b/api/src/main/java/brooklyn/entity/basic/EntityLocal.java
index 772161c..266e572 100644
--- a/api/src/main/java/brooklyn/entity/basic/EntityLocal.java
+++ b/api/src/main/java/brooklyn/entity/basic/EntityLocal.java
@@ -60,11 +60,27 @@ public interface EntityLocal extends Entity, Configurable {
     void setDisplayName(String displayName);
 
     /**
-     * Must be called before the entity is managed.
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code entity.config().set(key, val)}
      */
+    @Deprecated
     <T> T setConfig(ConfigKey<T> key, T val);
+    
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code entity.config().set(key, val)}
+     */
+    @Deprecated
     <T> T setConfig(ConfigKey<T> key, Task<T> val);
+    
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code entity.config().set(key, val)}
+     */
+    @Deprecated
     <T> T setConfig(HasConfigKey<T> key, T val);
+    
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code entity.config().set(key, val)}
+     */
+    @Deprecated
     <T> T setConfig(HasConfigKey<T> key, Task<T> val);
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java b/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
index 26e75c9..9575246 100644
--- a/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
+++ b/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
@@ -19,7 +19,15 @@
 package brooklyn.basic;
 
 import brooklyn.entity.rebind.RebindSupport;
+import java.util.Map;
+
+import brooklyn.config.ConfigKey;
+import brooklyn.config.ConfigKey.HasConfigKey;
 import brooklyn.entity.rebind.Rebindable;
+import brooklyn.util.config.ConfigBag;
+import brooklyn.util.guava.Maybe;
+
+import com.google.common.annotations.Beta;
 
 public interface BrooklynObjectInternal extends BrooklynObject, Rebindable {
     
@@ -28,4 +36,58 @@ public interface BrooklynObjectInternal extends BrooklynObject, Rebindable {
     @SuppressWarnings("rawtypes")  // subclasses typically apply stronger typing
     RebindSupport getRebindSupport();
     
+    ConfigurationSupportInternal config();
+
+    @Beta
+    public interface ConfigurationSupportInternal extends BrooklynObject.ConfigurationSupport {
+        
+        /**
+         * Returns a read-only view of all the config key/value pairs on this entity, backed by a string-based map, 
+         * including config names that did not match anything on this entity.
+         */
+        @Beta
+        ConfigBag getBag();
+        
+        /**
+         * Returns a read-only view of the local (i.e. not inherited) config key/value pairs on this entity, 
+         * backed by a string-based map, including config names that did not match anything on this entity.
+         */
+        @Beta
+        ConfigBag getLocalBag();
+        
+        /**
+         * Returns the uncoerced value for this config key, if available, not taking any default.
+         * If there is no local value and there is an explicit inherited value, will return the inherited.
+         */
+        @Beta
+        Maybe<Object> getRaw(ConfigKey<?> key);
+
+        /**
+         * @see {@link #getConfigRaw(ConfigKey)}
+         */
+        @Beta
+        Maybe<Object> getRaw(HasConfigKey<?> key);
+
+        /**
+         * Returns the uncoerced value for this config key, if available,
+         * not following any inheritance chains and not taking any default.
+         */
+        @Beta
+        Maybe<Object> getLocalRaw(ConfigKey<?> key);
+
+        /**
+         * @see {@link #getLocalConfigRaw(ConfigKey)}
+         */
+        @Beta
+        Maybe<Object> getLocalRaw(HasConfigKey<?> key);
+
+        @Beta
+        void addToLocalBag(Map<String, ?> vals);
+
+        @Beta
+        void refreshInheritedConfig();
+        
+        @Beta
+        void refreshInheritedConfigOfChildren();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
index fdac692..494bfb0 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
@@ -46,6 +46,14 @@ public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT>, BrooklynObj
     public CatalogItem<T,SpecT> getDto() {
         return itemDto;
     }
+    
+    /**
+     * Config not supported for catalog item. See {@link #getPlanYaml()}.
+     */
+    @Override
+    public ConfigurationSupportInternal config() {
+        throw new UnsupportedOperationException();
+    }
 
     @Override
     public CatalogItemType getCatalogItemType() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
index fde647b..cf23c26 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
@@ -62,6 +62,14 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
     private @SetFromFlag Collection<CatalogBundle> libraries;
     private @SetFromFlag Set<Object> tags = Sets.newLinkedHashSet();
 
+    /**
+     * Config not supported for catalog item. See {@link #getPlanYaml()}.
+     */
+    @Override
+    public ConfigurationSupportInternal config() {
+        throw new UnsupportedOperationException();
+    }
+        
     @Override
     public String getId() {
         return getCatalogItemId();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index a004bc0..2fa1bf1 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -212,6 +212,8 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
     
     protected final EntityManagementSupport managementSupport = new EntityManagementSupport(this);
 
+    private final BasicConfigurationSupport config = new BasicConfigurationSupport();
+
     /**
      * The config values of this entity. Updating this map should be done
      * via getConfig/setConfig.
@@ -236,7 +238,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
     protected final Map<String,Object> tempWorkings = Maps.newLinkedHashMap();
 
     protected transient SubscriptionTracker _subscriptionTracker;
-
+    
     public AbstractEntity() {
         this(Maps.newLinkedHashMap(), null);
     }
@@ -407,21 +409,41 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
     
     /**
      * Sets a config key value, and returns this Entity instance for use in fluent-API style coding.
+     * 
+     * @deprecated since 0.7.0; see {@link #config()}, such as {@code config().set(key, value)}
      */
+    @Deprecated
     public <T> AbstractEntity configure(ConfigKey<T> key, T value) {
         setConfig(key, value);
         return this;
     }
+    
+    /**
+     * @deprecated since 0.7.0; see {@link #config()}, such as {@code config().set(key, value)}
+     */
+    @SuppressWarnings("unchecked")
+    @Deprecated
     public <T> AbstractEntity configure(ConfigKey<T> key, String value) {
-        setConfig((ConfigKey)key, value);
+        config().set((ConfigKey)key, value);
         return this;
     }
+    
+    /**
+     * @deprecated since 0.7.0; see {@link #config()}, such as {@code config().set(key, value)}
+     */
+    @Deprecated
     public <T> AbstractEntity configure(HasConfigKey<T> key, T value) {
-        setConfig(key, value);
+        config().set(key, value);
         return this;
     }
+    
+    /**
+     * @deprecated since 0.7.0; see {@link #config()}, such as {@code config().set(key, value)}
+     */
+    @SuppressWarnings("unchecked")
+    @Deprecated
     public <T> AbstractEntity configure(HasConfigKey<T> key, String value) {
-        setConfig((ConfigKey)key, value);
+        config().set((ConfigKey)key, value);
         return this;
     }
 
@@ -472,7 +494,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
             if (oldConfig.getLocalConfig().size() > 0) {
                 configsInternal.setLocalConfig(oldConfig.getLocalConfig());
             }
-            refreshInheritedConfig();
+            config().refreshInheritedConfig();
 
             attributesInternal = new AttributeMap(this, managementContext.getStorage().<Collection<String>, Object>getMap(getId()+"-attributes"));
             if (oldAttribs.asRawMap().size() > 0) {
@@ -563,7 +585,7 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
         
         parent.set(entity);
         entity.addChild(getProxyIfAvailable());
-        refreshInheritedConfig();
+        config().refreshInheritedConfig();
         previouslyOwned = true;
         
         getApplication();
@@ -918,81 +940,211 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
     }
 
     @Override
+    public Map<AttributeSensor, Object> getAllAttributes() {
+        Map<AttributeSensor, Object> result = Maps.newLinkedHashMap();
+        Map<String, Object> attribs = attributesInternal.asMap();
+        for (Map.Entry<String,Object> entry : attribs.entrySet()) {
+            AttributeSensor<?> attribKey = (AttributeSensor<?>) entityType.getSensor(entry.getKey());
+            if (attribKey == null) {
+                // Most likely a race: e.g. persister thread calling getAllAttributes; writer thread
+                // has written attribute value and is in process of calling entityType.addSensorIfAbsent(attribute)
+                // Just use a synthetic AttributeSensor, rather than ignoring value.
+                // TODO If it's not a race, then don't log.warn every time!
+                LOG.warn("When retrieving all attributes of {}, no AttributeSensor for attribute {} (creating synthetic)", this, entry.getKey());
+                attribKey = Sensors.newSensor(Object.class, entry.getKey());
+            }
+            result.put(attribKey, entry.getValue());
+        }
+        return result;
+    }
+
+    
+    // -------- CONFIGURATION --------------
+
+    @Override
+    public ConfigurationSupportInternal config() {
+        return config;
+    }
+
+    private class BasicConfigurationSupport implements ConfigurationSupportInternal {
+
+        @Override
+        public <T> T get(ConfigKey<T> key) {
+            return configsInternal.getConfig(key);
+        }
+
+        @Override
+        public <T> T get(HasConfigKey<T> key) {
+            return get(key.getConfigKey());
+        }
+
+        @Override
+        public <T> T set(ConfigKey<T> key, T val) {
+            return setConfigInternal(key, val);
+        }
+
+        @Override
+        public <T> T set(HasConfigKey<T> key, T val) {
+            return set(key.getConfigKey(), val);
+        }
+
+        @Override
+        public <T> T set(ConfigKey<T> key, Task<T> val) {
+            return setConfigInternal(key, val);
+        }
+
+        @Override
+        public <T> T set(HasConfigKey<T> key, Task<T> val) {
+            return set(key.getConfigKey(), val);
+        }
+
+        @Override
+        public ConfigBag getBag() {
+            return configsInternal.getAllConfigBag();
+        }
+
+        @Override
+        public ConfigBag getLocalBag() {
+            return configsInternal.getLocalConfigBag();
+        }
+
+        @Override
+        public Maybe<Object> getRaw(ConfigKey<?> key) {
+            return configsInternal.getConfigRaw(key, true);
+        }
+
+        @Override
+        public Maybe<Object> getRaw(HasConfigKey<?> key) {
+            return getRaw(key.getConfigKey());
+        }
+
+        @Override
+        public Maybe<Object> getLocalRaw(ConfigKey<?> key) {
+            return configsInternal.getConfigRaw(key, false);
+        }
+
+        @Override
+        public Maybe<Object> getLocalRaw(HasConfigKey<?> key) {
+            return getLocalRaw(key.getConfigKey());
+        }
+
+        @Override
+        public void addToLocalBag(Map<String, ?> vals) {
+            configsInternal.addToLocalBag(vals);
+        }
+
+        @Override
+        public void refreshInheritedConfig() {
+            if (getParent() != null) {
+                configsInternal.setInheritedConfig(((EntityInternal)getParent()).getAllConfig(), ((EntityInternal)getParent()).config().getBag());
+            } else {
+                configsInternal.clearInheritedConfig();
+            }
+
+            refreshInheritedConfigOfChildren();
+        }
+        
+        @Override
+        public void refreshInheritedConfigOfChildren() {
+            for (Entity it : getChildren()) {
+                ((EntityInternal)it).config().refreshInheritedConfig();
+            }
+        }
+        
+        @SuppressWarnings("unchecked")
+        private <T> T setConfigInternal(ConfigKey<T> key, Object val) {
+            if (!inConstruction && getManagementSupport().isDeployed()) {
+                // previously we threw, then warned, but it is still quite common;
+                // so long as callers don't expect miracles, it should be fine.
+                // i (Alex) think the way to be stricter about this (if that becomes needed) 
+                // would be to introduce a 'mutable' field on config keys
+                LOG.debug("configuration being made to {} after deployment: {} = {}; change may not be visible in other contexts", 
+                        new Object[] { this, key, val });
+            }
+            T result = (T) configsInternal.setConfig(key, val);
+            
+            getManagementSupport().getEntityChangeListener().onConfigChanged(key);
+            return result;
+
+        }
+    }
+    
+    @Override
     public <T> T getConfig(ConfigKey<T> key) {
-        return configsInternal.getConfig(key);
+        return config().get(key);
     }
     
     @Override
     public <T> T getConfig(HasConfigKey<T> key) {
-        return configsInternal.getConfig(key);
+        return config().get(key);
     }
     
     @Override
+    @Deprecated
     public <T> T getConfig(HasConfigKey<T> key, T defaultValue) {
         return configsInternal.getConfig(key, defaultValue);
     }
     
     //don't use groovy defaults for defaultValue as that doesn't implement the contract; we need the above
     @Override
+    @Deprecated
     public <T> T getConfig(ConfigKey<T> key, T defaultValue) {
         return configsInternal.getConfig(key, defaultValue);
     }
     
     @Override
+    @Deprecated
     public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited) {
-        return configsInternal.getConfigRaw(key, includeInherited);
+        return (includeInherited) ? config().getRaw(key) : config().getLocalRaw(key);
     }
     
     @Override
+    @Deprecated
     public Maybe<Object> getConfigRaw(HasConfigKey<?> key, boolean includeInherited) {
-        return getConfigRaw(key.getConfigKey(), includeInherited);
-    }
-
-    @SuppressWarnings("unchecked")
-    private <T> T setConfigInternal(ConfigKey<T> key, Object val) {
-        if (!inConstruction && getManagementSupport().isDeployed()) {
-            // previously we threw, then warned, but it is still quite common;
-            // so long as callers don't expect miracles, it should be fine.
-            // i (Alex) think the way to be stricter about this (if that becomes needed) 
-            // would be to introduce a 'mutable' field on config keys
-            LOG.debug("configuration being made to {} after deployment: {} = {}; change may not be visible in other contexts", 
-                    new Object[] { this, key, val });
-        }
-        T result = (T) configsInternal.setConfig(key, val);
-        
-        getManagementSupport().getEntityChangeListener().onConfigChanged(key);
-        return result;
-
+        return (includeInherited) ? config().getRaw(key) : config().getLocalRaw(key);
     }
 
     @Override
+    @Deprecated
     public <T> T setConfig(ConfigKey<T> key, T val) {
-        return setConfigInternal(key, val);
+        return config().set(key, val);
     }
 
     @Override
+    @Deprecated
     public <T> T setConfig(ConfigKey<T> key, Task<T> val) {
-        return setConfigInternal(key, val);
+        return config().set(key, val);
     }
 
+    /**
+     * @deprecated since 0.7.0; use {@code config().set(key, task)}, with {@link Task} instead of {@link DeferredSupplier}
+     */
+    @Deprecated
     public <T> T setConfig(ConfigKey<T> key, DeferredSupplier val) {
-        return setConfigInternal(key, val);
+        return config.setConfigInternal(key, val);
     }
 
     @Override
+    @Deprecated
     public <T> T setConfig(HasConfigKey<T> key, T val) {
-        return setConfig(key.getConfigKey(), val);
+        return config().set(key, val);
     }
 
     @Override
+    @Deprecated
     public <T> T setConfig(HasConfigKey<T> key, Task<T> val) {
-        return (T) setConfig(key.getConfigKey(), val);
+        return (T) config().set(key, val);
     }
 
+    /**
+     * @deprecated since 0.7.0; use {@code config().set(key, task)}, with {@link Task} instead of {@link DeferredSupplier}
+     */
+    @Deprecated
     public <T> T setConfig(HasConfigKey<T> key, DeferredSupplier val) {
         return setConfig(key.getConfigKey(), val);
     }
 
+    @SuppressWarnings("unchecked")
     public <T> T setConfigEvenIfOwned(ConfigKey<T> key, T val) {
         return (T) configsInternal.setConfig(key, val);
     }
@@ -1001,71 +1153,69 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
         return setConfigEvenIfOwned(key.getConfigKey(), val);
     }
 
+    /**
+     * @deprecated since 0.7.0; use {@code if (val != null) config().set(key, val)}
+     */
+    @Deprecated
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     protected void setConfigIfValNonNull(ConfigKey key, Object val) {
-        if (val != null) setConfig(key, val);
+        if (val != null) config().set(key, val);
     }
-    
+
+    /**
+     * @deprecated since 0.7.0; use {@code if (val != null) config().set(key, val)}
+     */
+    @Deprecated
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     protected void setConfigIfValNonNull(HasConfigKey key, Object val) {
-        if (val != null) setConfig(key, val);
+        if (val != null) config().set(key, val);
     }
 
+    /**
+     * @deprecated since 0.7.0; see {@code config().refreshInheritedConfig()}
+     */
     @Override
+    @Deprecated
     public void refreshInheritedConfig() {
-        if (getParent() != null) {
-            configsInternal.setInheritedConfig(((EntityInternal)getParent()).getAllConfig(), ((EntityInternal)getParent()).getAllConfigBag());
-        } else {
-            configsInternal.clearInheritedConfig();
-        }
-
-        refreshInheritedConfigOfChildren();
+        config().refreshInheritedConfig();
     }
 
+    /**
+     * @deprecated since 0.7.0; see {@code config().refreshInheritedConfigOfChildren()}
+     */
+    @Deprecated
     void refreshInheritedConfigOfChildren() {
-        for (Entity it : getChildren()) {
-            ((EntityInternal)it).refreshInheritedConfig();
-        }
+        config().refreshInheritedConfigOfChildren();
     }
 
     @Override
+    @Deprecated
     public EntityConfigMap getConfigMap() {
         return configsInternal;
     }
     
     @Override
+    @Deprecated
     public Map<ConfigKey<?>,Object> getAllConfig() {
         return configsInternal.getAllConfig();
     }
 
     @Beta
     @Override
+    @Deprecated
     public ConfigBag getAllConfigBag() {
-        return configsInternal.getAllConfigBag();
+        return config().getBag();
     }
 
     @Beta
     @Override
+    @Deprecated
     public ConfigBag getLocalConfigBag() {
-        return configsInternal.getLocalConfigBag();
+        return config().getLocalBag();
     }
 
-    @Override
-    public Map<AttributeSensor, Object> getAllAttributes() {
-        Map<AttributeSensor, Object> result = Maps.newLinkedHashMap();
-        Map<String, Object> attribs = attributesInternal.asMap();
-        for (Map.Entry<String,Object> entry : attribs.entrySet()) {
-            AttributeSensor<?> attribKey = (AttributeSensor<?>) entityType.getSensor(entry.getKey());
-            if (attribKey == null) {
-                // Most likely a race: e.g. persister thread calling getAllAttributes; writer thread
-                // has written attribute value and is in process of calling entityType.addSensorIfAbsent(attribute)
-                // Just use a synthetic AttributeSensor, rather than ignoring value.
-                // TODO If it's not a race, then don't log.warn every time!
-                LOG.warn("When retrieving all attributes of {}, no AttributeSensor for attribute {} (creating synthetic)", this, entry.getKey());
-                attribKey = Sensors.newSensor(Object.class, entry.getKey());
-            }
-            result.put(attribKey, entry.getValue());
-        }
-        return result;
-    }
+    
+    // -------- SUBSCRIPTIONS --------------
 
     /** @see EntityLocal#subscribe */
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/core/src/main/java/brooklyn/entity/basic/EntityInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/EntityInternal.java b/core/src/main/java/brooklyn/entity/basic/EntityInternal.java
index 56443a9..ba8df78 100644
--- a/core/src/main/java/brooklyn/entity/basic/EntityInternal.java
+++ b/core/src/main/java/brooklyn/entity/basic/EntityInternal.java
@@ -57,26 +57,37 @@ public interface EntityInternal extends BrooklynObjectInternal, EntityLocal, Reb
      */
     <T> T setAttributeWithoutPublishing(AttributeSensor<T> sensor, T val);
 
+    /**
+     * @deprecated since 0.7.0; instead just use methods on {@link ConfigurationSupportInternal} returned by {@link #config()}
+     */
+    @Deprecated
     EntityConfigMap getConfigMap();
 
     /**
      * @return a read-only copy of all the config key/value pairs on this entity.
+     * 
+     * @deprecated since 0.7.0; instead just use methods on {@link ConfigurationSupportInternal} returned by {@link #config()}
      */
+    @Deprecated
     @Beta
     Map<ConfigKey<?>,Object> getAllConfig();
 
     /**
      * Returns a read-only view of all the config key/value pairs on this entity, backed by a string-based map, 
      * including config names that did not match anything on this entity.
+     * 
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code entity.config().getBag()}
      */
-    @Beta
+    @Deprecated
     ConfigBag getAllConfigBag();
 
     /**
      * Returns a read-only view of the local (i.e. not inherited) config key/value pairs on this entity, 
      * backed by a string-based map, including config names that did not match anything on this entity.
+     * 
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code entity.config().getLocalBag()}
      */
-    @Beta
+    @Deprecated
     ConfigBag getLocalConfigBag();
 
     @Beta
@@ -84,8 +95,12 @@ public interface EntityInternal extends BrooklynObjectInternal, EntityLocal, Reb
 
     @Beta
     void removeAttribute(AttributeSensor<?> attribute);
-    
-    @Beta
+
+    /**
+     * 
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code entity.config().refreshInheritedConfig()}
+     */
+    @Deprecated
     void refreshInheritedConfig();
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
index 59bbfc7..fe592db 100644
--- a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
@@ -48,6 +48,7 @@ import brooklyn.location.Location;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.geo.HasHostGeoInfo;
 import brooklyn.location.geo.HostGeoInfo;
+import brooklyn.management.Task;
 import brooklyn.management.internal.LocalLocationManager;
 import brooklyn.management.internal.ManagementContextInternal;
 import brooklyn.mementos.LocationMemento;
@@ -55,6 +56,7 @@ import brooklyn.util.collections.SetFromLiveMap;
 import brooklyn.util.config.ConfigBag;
 import brooklyn.util.flags.FlagUtils;
 import brooklyn.util.flags.TypeCoercions;
+import brooklyn.util.guava.Maybe;
 import brooklyn.util.stream.Streams;
 
 import com.google.common.base.Objects;
@@ -100,6 +102,8 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
 
     private Reference<HostGeoInfo> hostGeoInfo = new BasicReference<HostGeoInfo>();
 
+    private ConfigurationSupportInternal config = new BasicConfigurationSupport();
+    
     private ConfigBag configBag = new ConfigBag();
 
     private volatile boolean managed;
@@ -109,7 +113,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
     private final Map<Class<?>, Object> extensions = Maps.newConcurrentMap();
     
     private final LocationDynamicType locationType;
-    
+
     /**
      * Construct a new instance of an AbstractLocation.
      */
@@ -343,28 +347,121 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
     }
 
     @Override
-    public <T> T getConfig(HasConfigKey<T> key) {
-        return getConfig(key.getConfigKey());
+    public ConfigurationSupportInternal config() {
+        return config ;
     }
 
-    @Override
-    public <T> T getConfig(ConfigKey<T> key) {
-        if (hasConfig(key, false)) return getLocalConfigBag().get(key);
-        if (getParent()!=null && isInherited(key)) {
-            return getParent().getConfig(key);
+    private class BasicConfigurationSupport implements ConfigurationSupportInternal {
+
+        @Override
+        public <T> T get(ConfigKey<T> key) {
+            if (hasConfig(key, false)) return getLocalBag().get(key);
+            if (getParent() != null && isInherited(key)) {
+                return getParent().getConfig(key);
+            }
+            
+            // In case this entity class has overridden the given key (e.g. to set default), then retrieve this entity's key
+            // TODO when locations become entities, the duplication of this compared to EntityConfigMap.getConfig will disappear.
+            @SuppressWarnings("unchecked")
+            ConfigKey<T> ownKey = (ConfigKey<T>) elvis(locationType.getConfigKey(key.getName()), key);
+
+            return ownKey.getDefaultValue();
+        }
+
+        @Override
+        public <T> T get(HasConfigKey<T> key) {
+            return get(key.getConfigKey());
+        }
+
+        @Override
+        public <T> T set(ConfigKey<T> key, T val) {
+            T result = configBag.put(key, val);
+            onChanged();
+            return result;
+        }
+
+        @Override
+        public <T> T set(HasConfigKey<T> key, T val) {
+            return set(key.getConfigKey(), val);
+        }
+
+        @Override
+        public <T> T set(ConfigKey<T> key, Task<T> val) {
+            // TODO Support for locations
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public <T> T set(HasConfigKey<T> key, Task<T> val) {
+            // TODO Support for locations
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public ConfigBag getBag() {
+            ConfigBag result = ConfigBag.newInstanceExtending(configBag, ImmutableMap.of());
+            Location p = getParent();
+            if (p!=null) result.putIfAbsent(((LocationInternal)p).getAllConfigBag().getAllConfig());
+            return result;
+        }
+
+        @Override
+        public ConfigBag getLocalBag() {
+            return configBag;
+        }
+
+        @Override
+        public Maybe<Object> getRaw(ConfigKey<?> key) {
+            if (hasConfig(key, false)) return Maybe.of(getLocalBag().getStringKey(key.getName()));
+            if (getParent() != null) return ((AbstractLocation)getParent()).config().getRaw(key);
+            return Maybe.absent();
+        }
+
+        @Override
+        public Maybe<Object> getRaw(HasConfigKey<?> key) {
+            return getRaw(key.getConfigKey());
+        }
+
+        @Override
+        public Maybe<Object> getLocalRaw(ConfigKey<?> key) {
+            if (hasConfig(key, false)) return Maybe.of(getLocalBag().getStringKey(key.getName()));
+            return Maybe.absent();
+        }
+
+        @Override
+        public Maybe<Object> getLocalRaw(HasConfigKey<?> key) {
+            return getLocalRaw(key.getConfigKey());
+        }
+
+        @Override
+        public void addToLocalBag(Map<String, ?> vals) {
+            configBag.putAll(vals);
         }
         
-        // In case this entity class has overridden the given key (e.g. to set default), then retrieve this entity's key
-        // TODO when locations become entities, the duplication of this compared to EntityConfigMap.getConfig will disappear.
-        @SuppressWarnings("unchecked")
-        ConfigKey<T> ownKey = (ConfigKey<T>) elvis(locationType.getConfigKey(key.getName()), key);
+        @Override
+        public void refreshInheritedConfig() {
+            // no-op for location
+        }
+        
+        @Override
+        public void refreshInheritedConfigOfChildren() {
+            // no-op for location
+        }
+    }
+    
+    @Override
+    public <T> T getConfig(HasConfigKey<T> key) {
+        return config().get(key);
+    }
 
-        return ownKey.getDefaultValue();
+    @Override
+    public <T> T getConfig(ConfigKey<T> key) {
+        return config().get(key);
     }
 
     @Override
     public boolean hasConfig(ConfigKey<?> key, boolean includeInherited) {
-        boolean locally = getLocalConfigBag().containsKey(key);
+        boolean locally = config().getLocalBag().containsKey(key);
         if (locally) return true;
         if (!includeInherited || !isInherited(key)) return false;
         if (getParent()!=null) return getParent().hasConfig(key, true);
@@ -383,7 +480,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
 
     @Override
     public Map<String,Object> getAllConfig(boolean includeInherited) {
-        ConfigBag bag = (includeInherited ? getAllConfigBag() : getLocalConfigBag());
+        ConfigBag bag = (includeInherited ? config().getBag() : config().getLocalBag());
         return bag.getAllConfig();
     }
     
@@ -393,15 +490,12 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
         // here ConfigBag is used exclusively so
         // we have no information about what to include/exclude inheritance wise.
         // however few things use getAllConfigBag()
-        ConfigBag result = ConfigBag.newInstanceExtending(configBag, ImmutableMap.of());
-        Location p = getParent();
-        if (p!=null) result.putIfAbsent(((LocationInternal)p).getAllConfigBag().getAllConfig());
-        return result;
+        return config().getBag();
     }
     
     @Override
     public ConfigBag getLocalConfigBag() {
-        return configBag;
+        return config().getLocalBag();
     }
 
     /** 
@@ -409,14 +503,12 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
      * @since 0.6
      */
     public ConfigBag getRawLocalConfigBag() {
-        return getLocalConfigBag();
+        return config().getLocalBag();
     }
     
     @Override
     public <T> T setConfig(ConfigKey<T> key, T value) {
-        T result = configBag.put(key, value);
-        onChanged();
-        return result;
+        return config().set(key, value);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
index a005e34..ba5ecd0 100644
--- a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
+++ b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
@@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory;
 import brooklyn.basic.AbstractBrooklynObject;
 import brooklyn.basic.BrooklynObjectInternal;
 import brooklyn.config.ConfigKey;
+import brooklyn.config.ConfigKey.HasConfigKey;
 import brooklyn.config.ConfigMap;
 import brooklyn.enricher.basic.AbstractEnricher;
 import brooklyn.entity.Entity;
@@ -49,12 +50,14 @@ import brooklyn.event.SensorEventListener;
 import brooklyn.management.ExecutionContext;
 import brooklyn.management.SubscriptionContext;
 import brooklyn.management.SubscriptionHandle;
+import brooklyn.management.Task;
 import brooklyn.management.internal.SubscriptionTracker;
 import brooklyn.policy.EntityAdjunct;
 import brooklyn.util.config.ConfigBag;
 import brooklyn.util.flags.FlagUtils;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.flags.TypeCoercions;
+import brooklyn.util.guava.Maybe;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.Objects;
@@ -75,6 +78,8 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple
 
     protected transient ExecutionContext execution;
 
+    private final BasicConfigurationSupport config = new BasicConfigurationSupport();
+    
     /**
      * The config values of this entity. Updating this map should be done
      * via getConfig/setConfig.
@@ -168,8 +173,104 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple
         return _legacyNoConstructionInit;
     }
 
+    @Override
+    public ConfigurationSupportInternal config() {
+        return config;
+    }
+
+    private class BasicConfigurationSupport implements ConfigurationSupportInternal {
+
+        @Override
+        public <T> T get(ConfigKey<T> key) {
+            return configsInternal.getConfig(key);
+        }
+
+        @Override
+        public <T> T get(HasConfigKey<T> key) {
+            return get(key.getConfigKey());
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public <T> T set(ConfigKey<T> key, T val) {
+            if (entity != null && isRunning()) {
+                doReconfigureConfig(key, val);
+            }
+            T result = (T) configsInternal.setConfig(key, val);
+            onChanged();
+            return result;
+        }
+
+        @Override
+        public <T> T set(HasConfigKey<T> key, T val) {
+            return setConfig(key.getConfigKey(), val);
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public <T> T set(ConfigKey<T> key, Task<T> val) {
+            if (entity != null && isRunning()) {
+                // TODO Support for AbstractEntityAdjunct
+                throw new UnsupportedOperationException();
+            }
+            T result = (T) configsInternal.setConfig(key, val);
+            onChanged();
+            return result;
+        }
+
+        @Override
+        public <T> T set(HasConfigKey<T> key, Task<T> val) {
+            return set(key.getConfigKey(), val);
+        }
+
+        @Override
+        public ConfigBag getBag() {
+            return getLocalBag();
+        }
+
+        @Override
+        public ConfigBag getLocalBag() {
+            return ConfigBag.newInstance(configsInternal.getAllConfig());
+        }
+
+        @Override
+        public Maybe<Object> getRaw(ConfigKey<?> key) {
+            return configsInternal.getConfigRaw(key, true);
+        }
+
+        @Override
+        public Maybe<Object> getRaw(HasConfigKey<?> key) {
+            return getRaw(key.getConfigKey());
+        }
+
+        @Override
+        public Maybe<Object> getLocalRaw(ConfigKey<?> key) {
+            return configsInternal.getConfigRaw(key, false);
+        }
+
+        @Override
+        public Maybe<Object> getLocalRaw(HasConfigKey<?> key) {
+            return getLocalRaw(key.getConfigKey());
+        }
+
+        @Override
+        public void addToLocalBag(Map<String, ?> vals) {
+            configsInternal.addToLocalBag(vals);
+        }
+        
+        @Override
+        public void refreshInheritedConfig() {
+            // no-op for location
+        }
+        
+        @Override
+        public void refreshInheritedConfigOfChildren() {
+            // no-op for location
+        }
+    }
+
     public <T> T getConfig(ConfigKey<T> key) {
-        return configsInternal.getConfig(key);
+        return config().get(key);
     }
     
     public Map<ConfigKey<?>, Object> getAllConfig() {
@@ -177,18 +278,12 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple
     }
     
     protected <K> K getRequiredConfig(ConfigKey<K> key) {
-        return checkNotNull(getConfig(key), key.getName());
+        return checkNotNull(config().get(key), key.getName());
     }
 
-    @SuppressWarnings("unchecked")
     @Override
     public <T> T setConfig(ConfigKey<T> key, T val) {
-        if (entity != null && isRunning()) {
-            doReconfigureConfig(key, val);
-        }
-        T result = (T) configsInternal.setConfig(key, val);
-        onChanged();
-        return result;
+        return config().set(key, val);
     }
     
     // TODO make immutable

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/4c233de5/core/src/main/java/brooklyn/policy/basic/ConfigMapImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/policy/basic/ConfigMapImpl.java b/core/src/main/java/brooklyn/policy/basic/ConfigMapImpl.java
index 686c4c2..9d62dda 100644
--- a/core/src/main/java/brooklyn/policy/basic/ConfigMapImpl.java
+++ b/core/src/main/java/brooklyn/policy/basic/ConfigMapImpl.java
@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
 
 import brooklyn.config.ConfigKey;
 import brooklyn.config.ConfigKey.HasConfigKey;
+import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.basic.ConfigMapViewWithStringKeys;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.EntityInternal;
@@ -160,6 +161,12 @@ public class ConfigMapImpl implements brooklyn.config.ConfigMap {
         return oldVal;
     }
     
+    public void addToLocalBag(Map<String, ?> vals) {
+        for (Map.Entry<String, ?> entry : vals.entrySet()) {
+            setConfig(ConfigKeys.newConfigKey(Object.class, entry.getKey()), entry.getValue());
+        }
+    }
+
     @Override
     public ConfigMapImpl submap(Predicate<ConfigKey<?>> filter) {
         ConfigMapImpl m = new ConfigMapImpl(adjunct);


[5/9] incubator-brooklyn git commit: Use {location, policy, enricher}.config(), instead of newly deprecated methods

Posted by al...@apache.org.
Use {location,policy,enricher}.config(), instead of newly deprecated methods


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/73c49852
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/73c49852
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/73c49852

Branch: refs/heads/master
Commit: 73c498525ff2008ca078e430b75dc9fe50e3b732
Parents: 972ab83
Author: Aled Sage <al...@gmail.com>
Authored: Tue Nov 11 16:51:16 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 18 11:02:35 2015 +0000

----------------------------------------------------------------------
 .../java/brooklyn/entity/basic/Entities.java    |  2 +-
 .../group/AbstractMembershipTrackingPolicy.java |  2 +-
 .../entity/proxying/InternalPolicyFactory.java  |  4 +--
 .../rebind/BasicLocationRebindSupport.java      |  7 +++--
 .../entity/rebind/dto/MementosGenerators.java   |  2 +-
 .../FixedListMachineProvisioningLocation.java   |  3 +-
 .../LocalhostMachineProvisioningLocation.java   |  2 +-
 .../brooklyn/location/basic/MultiLocation.java  |  2 +-
 .../location/basic/SimulatedLocation.java       |  2 +-
 .../location/basic/SshMachineLocation.java      |  7 +++--
 ...bstractCloudMachineProvisioningLocation.java |  2 +-
 .../internal/LocalLocationManager.java          |  3 +-
 .../java/brooklyn/util/task/ssh/SshTasks.java   |  2 +-
 .../enricher/basic/BasicEnricherTest.java       |  4 +--
 .../enricher/basic/EnricherConfigTest.java      |  8 ++---
 ...DynamicClusterWithAvailabilityZonesTest.java |  4 +--
 .../entity/rebind/RebindLocationTest.java       |  2 +-
 .../entity/rebind/RebindPolicyTest.java         |  2 +-
 .../basic/ByonLocationResolverTest.java         | 22 +++++++-------
 .../basic/HostLocationResolverTest.java         |  2 +-
 .../basic/LocalhostLocationResolverTest.java    | 16 +++++-----
 .../location/basic/LocationConfigTest.java      | 32 ++++++++++----------
 .../SingleMachineLocationResolverTest.java      |  2 +-
 .../brooklyn/policy/basic/BasicPolicyTest.java  |  4 +--
 .../brooklyn/policy/basic/PolicyConfigTest.java |  8 ++---
 ...lusterDatabaseExampleAppIntegrationTest.java |  4 +--
 .../jclouds/JcloudsByonLocationResolver.java    |  2 +-
 .../location/jclouds/JcloudsLocation.java       | 31 +++++++++----------
 .../jclouds/JcloudsSshMachineLocation.java      |  4 +--
 .../JcloudsByonLocationResolverAwsLiveTest.java |  4 +--
 .../jclouds/JcloudsLocationResolverTest.java    | 20 ++++++------
 .../location/jclouds/LiveTestEntity.java        |  3 +-
 .../jclouds/RebindJcloudsLocationLiveTest.java  |  4 +--
 .../jclouds/RebindJcloudsLocationTest.java      |  2 +-
 .../policy/autoscaling/AutoScalerPolicy.java    | 14 ++++-----
 .../AutoScalerPolicyReconfigurationTest.java    | 16 +++++-----
 .../software/MachineLifecycleEffectorTasks.java |  2 +-
 .../entity/software/SshEffectorTasks.java       |  2 +-
 .../entity/dns/AbstractGeoDnsServiceTest.java   |  2 +-
 .../camp/brooklyn/LocationsYamlTest.java        |  6 ++--
 .../main/java/brooklyn/cli/CloudExplorer.java   |  2 +-
 .../webcluster/SinusoidalLoadGenerator.java     |  8 ++---
 .../rest/resources/PolicyConfigResource.java    |  7 +++--
 .../rest/transform/LocationTransformer.java     | 22 +++++++++-----
 .../rest/resources/ApplicationResourceTest.java |  6 ++--
 .../rest/util/EntityLocationUtilsTest.java      |  3 +-
 46 files changed, 161 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/entity/basic/Entities.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/Entities.java b/core/src/main/java/brooklyn/entity/basic/Entities.java
index 68b7912..cdf1a01 100644
--- a/core/src/main/java/brooklyn/entity/basic/Entities.java
+++ b/core/src/main/java/brooklyn/entity/basic/Entities.java
@@ -401,7 +401,7 @@ public class Entities {
     public static void dumpInfo(Location loc, Writer out, String currentIndentation, String tab) throws IOException {
         out.append(currentIndentation+loc.toString()+"\n");
 
-        for (Object entryO : ((LocationInternal)loc).getAllConfigBag().getAllConfig().entrySet()) {
+        for (Object entryO : ((LocationInternal)loc).config().getBag().getAllConfig().entrySet()) {
             Map.Entry entry = (Map.Entry)entryO;
             Object keyO = entry.getKey();
             String key =

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java b/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
index 22a2917..459f515 100644
--- a/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
+++ b/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
@@ -112,7 +112,7 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
     public void setGroup(Group group) {
         // relies on doReconfigureConfig to make the actual change
         LOG.warn("Deprecated use of setGroup in "+AbstractMembershipTrackingPolicy.class.getSimpleName()+"; group should be set as config");
-        setConfig(GROUP, group);
+        config().set(GROUP, group);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
index 618a691..3ef42f7 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
@@ -123,7 +123,7 @@ public class InternalPolicyFactory extends InternalFactory {
             // which the user may have overridden? 
             // Also see InternalLocationFactory for same issue, which this code is based on.
             for (Map.Entry<ConfigKey<?>, Object> entry : spec.getConfig().entrySet()) {
-                ((AbstractPolicy)pol).setConfig((ConfigKey)entry.getKey(), entry.getValue());
+                pol.config().set((ConfigKey)entry.getKey(), entry.getValue());
             }
             ((AbstractPolicy)pol).init();
             
@@ -164,7 +164,7 @@ public class InternalPolicyFactory extends InternalFactory {
             // which the user may have overridden? 
             // Also see InternalLocationFactory for same issue, which this code is based on.
             for (Map.Entry<ConfigKey<?>, Object> entry : spec.getConfig().entrySet()) {
-                ((AbstractEnricher)enricher).setConfig((ConfigKey)entry.getKey(), entry.getValue());
+                enricher.config().set((ConfigKey)entry.getKey(), entry.getValue());
             }
             ((AbstractEnricher)enricher).init();
             

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/entity/rebind/BasicLocationRebindSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/BasicLocationRebindSupport.java b/core/src/main/java/brooklyn/entity/rebind/BasicLocationRebindSupport.java
index fc7947b..23ed373 100644
--- a/core/src/main/java/brooklyn/entity/rebind/BasicLocationRebindSupport.java
+++ b/core/src/main/java/brooklyn/entity/rebind/BasicLocationRebindSupport.java
@@ -31,6 +31,7 @@ import brooklyn.entity.rebind.dto.MementosGenerators;
 import brooklyn.location.Location;
 import brooklyn.location.basic.AbstractLocation;
 import brooklyn.mementos.LocationMemento;
+import brooklyn.util.collections.MutableMap;
 import brooklyn.util.flags.FlagUtils;
 import brooklyn.util.flags.TypeCoercions;
 
@@ -68,9 +69,9 @@ public class BasicLocationRebindSupport extends AbstractBrooklynObjectRebindSupp
         // FIXME Treat config like we do for entities; this code will disappear when locations become entities.
         
         // Note that the flags have been set in the constructor
-        // FIXME Relies on location.getLocalConfigBag being mutable (to modify the location's own config)
+        // FIXME Relies on location.config().getLocalBag() being mutable (to modify the location's own config)
         
-        location.getLocalConfigBag().putAll(memento.getLocationConfig()).markAll(
+        location.config().getLocalBag().putAll(memento.getLocationConfig()).markAll(
                 Sets.difference(memento.getLocationConfig().keySet(), memento.getLocationConfigUnused())).
                 setDescription(memento.getLocationConfigDescription());
 
@@ -93,7 +94,7 @@ public class BasicLocationRebindSupport extends AbstractBrooklynObjectRebindSupp
                     value = TypeCoercions.coerce(entry.getValue(), fieldType);
                 }
                 if (value != null) {
-                    location.getLocalConfigBag().putStringKey(flagName, value);
+                    location.config().addToLocalBag(MutableMap.of(flagName, value));
                     FlagUtils.setFieldFromFlag(location, flagName, value);
                 }
             } catch (NoSuchElementException e) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
index ca1c434..ed2ad0f 100644
--- a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
@@ -252,7 +252,7 @@ public class MementosGenerators {
                 .putAll(FlagUtils.getFieldsWithFlagsExcludingModifiers(location, Modifier.STATIC ^ Modifier.TRANSIENT))
                 .removeAll(nonPersistableFlagNames)
                 .build();
-        ConfigBag persistableConfig = new ConfigBag().copy( ((AbstractLocation)location).getLocalConfigBag() ).removeAll(nonPersistableFlagNames);
+        ConfigBag persistableConfig = new ConfigBag().copy( ((LocationInternal)location).config().getLocalBag() ).removeAll(nonPersistableFlagNames);
 
         builder.copyConfig(persistableConfig);
         builder.locationConfig.putAll(persistableFlags);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java b/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
index 97f1117..411d12a 100644
--- a/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
@@ -128,11 +128,12 @@ implements MachineProvisioningLocation<T>, Closeable {
         return super.configure(properties);
     }
     
+    @SuppressWarnings("unchecked")
     public FixedListMachineProvisioningLocation<T> newSubLocation(Map<?,?> newFlags) {
         // TODO shouldn't have to copy config bag as it should be inherited (but currently it is not used inherited everywhere; just most places)
         return getManagementContext().getLocationManager().createLocation(LocationSpec.create(getClass())
                 .parent(this)
-                .configure(getLocalConfigBag().getAllConfig())  // FIXME Should this just be inherited?
+                .configure(config().getLocalBag().getAllConfig())  // FIXME Should this just be inherited?
                 .configure(newFlags));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java b/core/src/main/java/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java
index 051b37e..093f85c 100644
--- a/core/src/main/java/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/LocalhostMachineProvisioningLocation.java
@@ -179,7 +179,7 @@ public class LocalhostMachineProvisioningLocation extends FixedListMachineProvis
             // TODO should take the plunge and try removing this altogether!
             // (or alternatively switch to copying all ancestor keys)
             for (HasConfigKey<?> k: SshMachineLocation.ALL_SSH_CONFIG_KEYS) {
-                if (hasConfig(k.getConfigKey(), true))
+                if (config().getRaw(k).isPresent())
                     flags2.put(k, getConfig(k));
             }
             

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/location/basic/MultiLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/MultiLocation.java b/core/src/main/java/brooklyn/location/basic/MultiLocation.java
index 575d292..fed111f 100644
--- a/core/src/main/java/brooklyn/location/basic/MultiLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/MultiLocation.java
@@ -120,7 +120,7 @@ public class MultiLocation<T extends MachineLocation> extends AbstractLocation i
         // TODO shouldn't have to copy config bag as it should be inherited (but currently it is not used inherited everywhere; just most places)
         return getManagementContext().getLocationManager().createLocation(LocationSpec.create(getClass())
                 .parent(this)
-                .configure(getLocalConfigBag().getAllConfig())  // FIXME Should this just be inherited?
+                .configure(config().getLocalBag().getAllConfig())  // FIXME Should this just be inherited?
                 .configure(newFlags));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/location/basic/SimulatedLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/SimulatedLocation.java b/core/src/main/java/brooklyn/location/basic/SimulatedLocation.java
index 2802351..05d39ce 100644
--- a/core/src/main/java/brooklyn/location/basic/SimulatedLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/SimulatedLocation.java
@@ -68,7 +68,7 @@ public class SimulatedLocation extends AbstractLocation implements MachineProvis
         // TODO shouldn't have to copy config bag as it should be inherited (but currently it is not used inherited everywhere; just most places)
         return getManagementContext().getLocationManager().createLocation(LocationSpec.create(getClass())
                 .parent(this)
-                .configure(getLocalConfigBag().getAllConfig())  // FIXME Should this just be inherited?
+                .configure(config().getLocalBag().getAllConfig())  // FIXME Should this just be inherited?
                 .configure(newFlags));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java b/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java
index 172b58c..51b96c6 100644
--- a/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java
@@ -76,6 +76,7 @@ import brooklyn.util.file.ArchiveUtils;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.flags.TypeCoercions;
 import brooklyn.util.guava.KeyTransformingLoadingCache.KeyTransformingSameTypeLoadingCache;
+import brooklyn.util.guava.Maybe;
 import brooklyn.util.internal.ssh.ShellTool;
 import brooklyn.util.internal.ssh.SshException;
 import brooklyn.util.internal.ssh.SshTool;
@@ -321,7 +322,7 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
     private BasicPool<SshTool> buildPool(final Map<String, ?> properties) {
         return BasicPool.<SshTool>builder()
                 .name(getDisplayName()+"@"+address+":"+getPort()+
-                        (hasConfig(SSH_HOST, true) ? "("+getConfig(SSH_HOST)+":"+getConfig(SSH_PORT)+")" : "")+
+                        (config().getRaw(SSH_HOST).isPresent() ? "("+getConfig(SSH_HOST)+":"+getConfig(SSH_PORT)+")" : "")+
                         ":hash"+System.identityHashCode(this))
                 .supplier(new Supplier<SshTool>() {
                         @Override public SshTool get() {
@@ -473,7 +474,7 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
 
     public String getUser() {
         if (!truth(user)) {
-            if (hasConfig(SshTool.PROP_USER, false)) {
+            if (config().getLocalRaw(SshTool.PROP_USER).isPresent()) {
                 LOG.warn("User configuration for "+this+" set after deployment; deprecated behaviour may not be supported in future versions");
             }
             return getConfig(SshTool.PROP_USER);
@@ -531,7 +532,7 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
                 .configure(SshTool.PROP_HOST, address.getHostName())
                 .putAll(props);
 
-            for (Map.Entry<String,Object> entry: getAllConfigBag().getAllConfig().entrySet()) {
+            for (Map.Entry<String,Object> entry: config().getBag().getAllConfig().entrySet()) {
                 String key = entry.getKey();
                 if (key.startsWith(SshTool.BROOKLYN_CONFIG_KEY_PREFIX)) {
                     key = Strings.removeFromStart(key, SshTool.BROOKLYN_CONFIG_KEY_PREFIX);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/location/cloud/AbstractCloudMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/cloud/AbstractCloudMachineProvisioningLocation.java b/core/src/main/java/brooklyn/location/cloud/AbstractCloudMachineProvisioningLocation.java
index b743342..9486bd1 100644
--- a/core/src/main/java/brooklyn/location/cloud/AbstractCloudMachineProvisioningLocation.java
+++ b/core/src/main/java/brooklyn/location/cloud/AbstractCloudMachineProvisioningLocation.java
@@ -54,7 +54,7 @@ implements MachineProvisioningLocation<SshMachineLocation>, CloudLocationConfig
         // TODO was previously `return LocationCreationUtils.newSubLocation(newFlags, this)`; need to retest on CloudStack etc
         return getManagementContext().getLocationManager().createLocation(LocationSpec.create(type)
                 .parent(this)
-                .configure(getLocalConfigBag().getAllConfig()) // FIXME Should this just be inherited?
+                .configure(config().getLocalBag().getAllConfig()) // FIXME Should this just be inherited?
                 .configure(newFlags));
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java b/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java
index cc44bf8..1fc5096 100644
--- a/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java
+++ b/core/src/main/java/brooklyn/management/internal/LocalLocationManager.java
@@ -412,7 +412,8 @@ public class LocalLocationManager implements LocationManagerInternal {
             ((AbstractLocation)loc).setParent(null, false);
         }
         // clear config to help with GC; i know you're not supposed to, but this seems to help, else config bag is littered with refs to entities etc
-        ((AbstractLocation)loc).getLocalConfigBag().clear();
+        // FIXME relies on config().getLocalBag() returning the underlying bag!
+        ((AbstractLocation)loc).config().getLocalBag().clear();
     }
     
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/main/java/brooklyn/util/task/ssh/SshTasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/task/ssh/SshTasks.java b/core/src/main/java/brooklyn/util/task/ssh/SshTasks.java
index 407d328..8944bb8 100644
--- a/core/src/main/java/brooklyn/util/task/ssh/SshTasks.java
+++ b/core/src/main/java/brooklyn/util/task/ssh/SshTasks.java
@@ -120,7 +120,7 @@ public class SshTasks {
                 allConfig.putAll(mgmt.getConfig().getAllConfig());
         }
         
-        allConfig.putAll(((LocationInternal)location).getAllConfigBag());
+        allConfig.putAll(((LocationInternal)location).config().getBag());
         
         Map<String, Object> result = Maps.newLinkedHashMap();
         for (String keyS : allConfig.getAllConfig().keySet()) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/enricher/basic/BasicEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/basic/BasicEnricherTest.java b/core/src/test/java/brooklyn/enricher/basic/BasicEnricherTest.java
index 0f0e831..4e33f6d 100644
--- a/core/src/test/java/brooklyn/enricher/basic/BasicEnricherTest.java
+++ b/core/src/test/java/brooklyn/enricher/basic/BasicEnricherTest.java
@@ -76,8 +76,8 @@ public class BasicEnricherTest extends BrooklynAppUnitTestSupport {
     public void testAddInstance() throws Exception {
         MyEnricher enricher = new MyEnricher();
         enricher.setDisplayName("Bob");
-        enricher.setConfig(MyEnricher.STR_KEY, "aval");
-        enricher.setConfig(MyEnricher.INT_KEY, 2);
+        enricher.config().set(MyEnricher.STR_KEY, "aval");
+        enricher.config().set(MyEnricher.INT_KEY, 2);
         app.addEnricher(enricher);
         
         assertEquals(enricher.getDisplayName(), "Bob");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/enricher/basic/EnricherConfigTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/enricher/basic/EnricherConfigTest.java b/core/src/test/java/brooklyn/enricher/basic/EnricherConfigTest.java
index 03677d9..5fbe5ea 100644
--- a/core/src/test/java/brooklyn/enricher/basic/EnricherConfigTest.java
+++ b/core/src/test/java/brooklyn/enricher/basic/EnricherConfigTest.java
@@ -101,8 +101,8 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigCanBeSetOnEnricher() throws Exception {
         MyEnricher enricher = new MyEnricher();
-        enricher.setConfig(MyEnricher.STR_KEY, "aval");
-        enricher.setConfig(MyEnricher.INT_KEY, 2);
+        enricher.config().set(MyEnricher.STR_KEY, "aval");
+        enricher.config().set(MyEnricher.INT_KEY, 2);
         app.addEnricher(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY), "aval");
@@ -114,7 +114,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
         MyEnricher enricher = new MyEnricher(MutableMap.builder()
                 .put(MyEnricher.STR_KEY, "aval")
                 .build());
-        enricher.setConfig(MyEnricher.STR_KEY, "diffval");
+        enricher.config().set(MyEnricher.STR_KEY, "diffval");
         app.addEnricher(enricher);
         
         assertEquals(enricher.getConfig(MyEnricher.STR_KEY), "diffval");
@@ -128,7 +128,7 @@ public class EnricherConfigTest extends BrooklynAppUnitTestSupport {
         app.addEnricher(enricher);
         
         try {
-            enricher.setConfig(MyEnricher.STR_KEY,"newval");
+            enricher.config().set(MyEnricher.STR_KEY,"newval");
             fail();
         } catch (UnsupportedOperationException e) {
             // success

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java b/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
index 6574400..dc16335 100644
--- a/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
+++ b/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
@@ -33,13 +33,13 @@ import org.testng.annotations.Test;
 
 import brooklyn.entity.BrooklynAppUnitTestSupport;
 import brooklyn.entity.Entity;
-import brooklyn.entity.basic.EntityLocal;
 import brooklyn.entity.basic.EntityPredicates;
 import brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.trait.FailingEntity;
 import brooklyn.location.Location;
 import brooklyn.location.LocationSpec;
+import brooklyn.location.basic.LocationInternal;
 import brooklyn.location.basic.SimulatedLocation;
 import brooklyn.location.cloud.AbstractAvailabilityZoneExtension;
 import brooklyn.location.cloud.AvailabilityZoneExtension;
@@ -217,7 +217,7 @@ public class DynamicClusterWithAvailabilityZonesTest extends BrooklynAppUnitTest
         protected SimulatedLocation newSubLocation(Location parent, String displayName) {
             return managementContext.getLocationManager().createLocation(LocationSpec.create(SimulatedLocation.class)
                     .parent(parent)
-                    .configure(parent.getAllConfig(true))
+                    .configure(((LocationInternal)parent).config().getBag().getAllConfig())
                     .displayName(displayName));
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/entity/rebind/RebindLocationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindLocationTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindLocationTest.java
index d81e1ab..7236768 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindLocationTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindLocationTest.java
@@ -241,7 +241,7 @@ public class RebindLocationTest extends RebindTestFixtureWithApp {
         newApp = rebind();
         MyLocation newLoc = (MyLocation) Iterables.get(newApp.getLocations(), 0);
 
-        assertNull(newLoc.getAllConfigBag().getStringKey("id"));
+        assertNull(newLoc.config().getBag().getStringKey("id"));
         assertEquals(newLoc.getId(), origLoc.getId());
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
index ef27a94..1f073ed 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
@@ -179,7 +179,7 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
     public void testReconfigurePolicyPersistsChange() throws Exception {
         MyPolicyReconfigurable policy = origApp.addPolicy(PolicySpec.create(MyPolicyReconfigurable.class)
                 .configure(MyPolicyReconfigurable.MY_CONFIG, "oldval"));
-        policy.setConfig(MyPolicyReconfigurable.MY_CONFIG, "newval");
+        policy.config().set(MyPolicyReconfigurable.MY_CONFIG, "newval");
         
         newApp = rebind();
         MyPolicyReconfigurable newPolicy = (MyPolicyReconfigurable) Iterables.getOnlyElement(newApp.getPolicies());

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/location/basic/ByonLocationResolverTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/ByonLocationResolverTest.java b/core/src/test/java/brooklyn/location/basic/ByonLocationResolverTest.java
index e0f1dda..2fb85e5 100644
--- a/core/src/test/java/brooklyn/location/basic/ByonLocationResolverTest.java
+++ b/core/src/test/java/brooklyn/location/basic/ByonLocationResolverTest.java
@@ -88,7 +88,7 @@ public class ByonLocationResolverTest {
         brooklynProperties.put("brooklyn.location.byon.publicKeyData", "myPublicKeyData");
         brooklynProperties.put("brooklyn.location.byon.privateKeyPassphrase", "myprivateKeyPassphrase");
 
-        Map<String, Object> conf = resolve("byon(hosts=\"1.1.1.1\")").getAllConfig(true);
+        Map<String, Object> conf = resolve("byon(hosts=\"1.1.1.1\")").config().getBag().getAllConfig();
         
         assertEquals(conf.get("privateKeyFile"), "myprivatekeyfile");
         assertEquals(conf.get("publicKeyFile"), "mypublickeyfile");
@@ -110,7 +110,7 @@ public class ByonLocationResolverTest {
         FixedListMachineProvisioningLocation<SshMachineLocation> loc = resolve("byon(privateKeyFile=myprivatekeyfile,hosts=\"1.1.1.1\")");
         SshMachineLocation machine = loc.obtain();
         
-        assertEquals(machine.getAllConfig(true).get("privateKeyFile"), "myprivatekeyfile");
+        assertEquals(machine.config().getBag().getStringKey("privateKeyFile"), "myprivatekeyfile");
         assertEquals(machine.getAddress(), Networking.getInetAddressWithFixedName("1.1.1.1"));
     }
 
@@ -130,7 +130,7 @@ public class ByonLocationResolverTest {
         // prefer location-generic if nothing else
         brooklynProperties.put("brooklyn.location.privateKeyData", "privateKeyData-inGeneric");
 
-        Map<String, Object> conf = resolve("named:mynamed").getAllConfig(true);
+        Map<String, Object> conf = resolve("named:mynamed").config().getBag().getAllConfig();
         
         assertEquals(conf.get("privateKeyFile"), "privateKeyFile-inNamed");
         assertEquals(conf.get("publicKeyFile"), "publicKeyFile-inProviderSpecific");
@@ -259,21 +259,21 @@ public class ByonLocationResolverTest {
                 new NamedLocationResolver().newLocationFromString(MutableMap.of(), "named:foo", managementContext.getLocationRegistry());
         
         Assert.assertEquals("/tmp/x", ll.getConfig(LocationConfigKeys.PRIVATE_KEY_FILE));
-        Assert.assertTrue(ll.hasConfig(LocationConfigKeys.PRIVATE_KEY_FILE, false));
-        Assert.assertEquals("/tmp/x", ll.getAllConfig(false).get(LocationConfigKeys.PRIVATE_KEY_FILE.getName()));
-        Assert.assertEquals("/tmp/x", ((AbstractLocation)ll).getAllConfigBag().get(LocationConfigKeys.PRIVATE_KEY_FILE));
+        Assert.assertTrue(((LocationInternal)ll).config().getLocalRaw(LocationConfigKeys.PRIVATE_KEY_FILE).isPresent());
+        Assert.assertEquals("/tmp/x", ((LocationInternal)ll).config().getLocalBag().getStringKey(LocationConfigKeys.PRIVATE_KEY_FILE.getName()));
+        Assert.assertEquals("/tmp/x", ((LocationInternal)ll).config().getBag().get(LocationConfigKeys.PRIVATE_KEY_FILE));
 
         SshMachineLocation l = ll.obtain(MutableMap.of());
         
         Assert.assertEquals("/tmp/x", l.getConfig(LocationConfigKeys.PRIVATE_KEY_FILE));
         
-        Assert.assertTrue(l.hasConfig(LocationConfigKeys.PRIVATE_KEY_FILE, true));
-        Assert.assertFalse(l.hasConfig(LocationConfigKeys.PRIVATE_KEY_FILE, false));
+        Assert.assertTrue(l.config().getRaw(LocationConfigKeys.PRIVATE_KEY_FILE).isPresent());
+        Assert.assertTrue(l.config().getLocalRaw(LocationConfigKeys.PRIVATE_KEY_FILE).isAbsent());
 
-        Assert.assertEquals("/tmp/x", l.getAllConfig(true).get(LocationConfigKeys.PRIVATE_KEY_FILE.getName()));
-        Assert.assertEquals("/tmp/x", l.getAllConfig(true).get(LocationConfigKeys.PRIVATE_KEY_FILE.getName()));
+        Assert.assertEquals("/tmp/x", l.config().getBag().getStringKey(LocationConfigKeys.PRIVATE_KEY_FILE.getName()));
+        Assert.assertEquals("/tmp/x", l.config().getBag().getStringKey(LocationConfigKeys.PRIVATE_KEY_FILE.getName()));
 
-        Assert.assertEquals("/tmp/x", l.getAllConfigBag().get(LocationConfigKeys.PRIVATE_KEY_FILE));
+        Assert.assertEquals("/tmp/x", l.config().getBag().get(LocationConfigKeys.PRIVATE_KEY_FILE));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/location/basic/HostLocationResolverTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/HostLocationResolverTest.java b/core/src/test/java/brooklyn/location/basic/HostLocationResolverTest.java
index 8ea9df0..51359ef 100644
--- a/core/src/test/java/brooklyn/location/basic/HostLocationResolverTest.java
+++ b/core/src/test/java/brooklyn/location/basic/HostLocationResolverTest.java
@@ -95,7 +95,7 @@ public class HostLocationResolverTest {
         // prefer location-generic if nothing else
         brooklynProperties.put("brooklyn.location.privateKeyData", "privateKeyData-inGeneric");
 
-        Map<String, Object> conf = resolve("named:mynamed").obtain(ImmutableMap.of()).getAllConfig(true);
+        Map<String, Object> conf = resolve("named:mynamed").obtain(ImmutableMap.of()).config().getBag().getAllConfig();
         
         assertEquals(conf.get("privateKeyFile"), "privateKeyFile-inNamed");
         assertEquals(conf.get("privateKeyData"), "privateKeyData-inGeneric");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/location/basic/LocalhostLocationResolverTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/LocalhostLocationResolverTest.java b/core/src/test/java/brooklyn/location/basic/LocalhostLocationResolverTest.java
index c09e3a7..69d0227 100644
--- a/core/src/test/java/brooklyn/location/basic/LocalhostLocationResolverTest.java
+++ b/core/src/test/java/brooklyn/location/basic/LocalhostLocationResolverTest.java
@@ -65,7 +65,7 @@ public class LocalhostLocationResolverTest {
         brooklynProperties.put("brooklyn.location.localhost.publicKeyData", "myPublicKeyData");
         brooklynProperties.put("brooklyn.location.localhost.privateKeyPassphrase", "myprivateKeyPassphrase");
 
-        Map<String, Object> conf = resolve("localhost").getAllConfig(true);
+        Map<String, Object> conf = resolve("localhost").config().getBag().getAllConfig();
         
         assertEquals(conf.get("privateKeyFile"), "myprivatekeyfile");
         assertEquals(conf.get("publicKeyFile"), "mypublickeyfile");
@@ -82,7 +82,7 @@ public class LocalhostLocationResolverTest {
         brooklynProperties.put("brooklyn.localhost.publicKeyData", "myPublicKeyData");
         brooklynProperties.put("brooklyn.localhost.privateKeyPassphrase", "myprivateKeyPassphrase");
 
-        Map<String, Object> conf = resolve("localhost").getAllConfig(true);
+        Map<String, Object> conf = resolve("localhost").config().getBag().getAllConfig();
         
         assertEquals(conf.get("privateKeyFile"), "myprivatekeyfile");
         assertEquals(conf.get("publicKeyFile"), "mypublickeyfile");
@@ -98,7 +98,7 @@ public class LocalhostLocationResolverTest {
         brooklynProperties.put("brooklyn.localhost.private-key-data", "myprivateKeyData");
         brooklynProperties.put("brooklyn.localhost.public-key-data", "myPublicKeyData");
         brooklynProperties.put("brooklyn.localhost.private-key-passphrase", "myprivateKeyPassphrase");
-        Map<String, Object> conf = resolve("localhost").getAllConfig(true);
+        Map<String, Object> conf = resolve("localhost").config().getBag().getAllConfig();
         
         assertEquals(conf.get("privateKeyFile"), "myprivatekeyfile");
         assertEquals(conf.get("publicKeyFile"), "mypublickeyfile");
@@ -123,7 +123,7 @@ public class LocalhostLocationResolverTest {
         // prefer location-generic if nothing else
         brooklynProperties.put("brooklyn.location.privateKeyData", "privateKeyData-inGeneric");
 
-        Map<String, Object> conf = resolve("named:mynamed").getAllConfig(true);
+        Map<String, Object> conf = resolve("named:mynamed").config().getBag().getAllConfig();
         
         assertEquals(conf.get("privateKeyFile"), "privateKeyFile-inNamed");
         assertEquals(conf.get("publicKeyFile"), "publicKeyFile-inProviderSpecific");
@@ -212,10 +212,10 @@ public class LocalhostLocationResolverTest {
     
     @Test
     public void testResolvesPropertiesInSpec() throws Exception {
-        Location location = resolve("localhost(privateKeyFile=myprivatekeyfile,name=myname)");
+        LocationInternal location = resolve("localhost(privateKeyFile=myprivatekeyfile,name=myname)");
         assertTrue(location instanceof LocalhostMachineProvisioningLocation);
         assertEquals(location.getDisplayName(), "myname");
-        assertEquals(location.getAllConfig(true).get("privateKeyFile"), "myprivatekeyfile");
+        assertEquals(location.config().getBag().getStringKey("privateKeyFile"), "myprivatekeyfile");
     }
     
     @Test
@@ -233,10 +233,10 @@ public class LocalhostLocationResolverTest {
         return (BasicLocationRegistry) managementContext.getLocationRegistry();
     }
     
-    private Location resolve(String val) {
+    private LocationInternal resolve(String val) {
         Location l = managementContext.getLocationRegistry().resolve(val);
         Assert.assertNotNull(l);
-        return l;
+        return (LocationInternal) l;
     }
     
     private void assertThrowsNoSuchElement(String val) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/location/basic/LocationConfigTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/LocationConfigTest.java b/core/src/test/java/brooklyn/location/basic/LocationConfigTest.java
index 8a907dc..a7ba743 100644
--- a/core/src/test/java/brooklyn/location/basic/LocationConfigTest.java
+++ b/core/src/test/java/brooklyn/location/basic/LocationConfigTest.java
@@ -56,8 +56,8 @@ public class LocationConfigTest {
                 .configure("mylocation.myconfig", "myval1")
                 .configure("mylocation.myconfigwithflagname", "myval2"));
         
-        assertEquals(loc.getAllConfigBag().getAllConfig(), ImmutableMap.of("mylocation.myconfig", "myval1", "mylocation.myconfigwithflagname", "myval2"));
-        assertEquals(loc.getLocalConfigBag().getAllConfig(), ImmutableMap.of("mylocation.myconfig", "myval1", "mylocation.myconfigwithflagname", "myval2"));
+        assertEquals(loc.config().getBag().getAllConfig(), ImmutableMap.of("mylocation.myconfig", "myval1", "mylocation.myconfigwithflagname", "myval2"));
+        assertEquals(loc.config().getLocalBag().getAllConfig(), ImmutableMap.of("mylocation.myconfig", "myval1", "mylocation.myconfigwithflagname", "myval2"));
         assertEquals(loc.getAllConfig(true), ImmutableMap.of("mylocation.myconfig", "myval1", "mylocation.myconfigwithflagname", "myval2"));
         assertEquals(loc.getAllConfig(false), ImmutableMap.of("mylocation.myconfig", "myval1", "mylocation.myconfigwithflagname", "myval2"));
     }
@@ -69,8 +69,8 @@ public class LocationConfigTest {
         LocationInternal loc = managementContext.getLocationManager().createLocation(LocationSpec.create(MyLocation.class)
                 .configure("myconfigflagname", "myval"));
         
-        assertEquals(loc.getAllConfigBag().getAllConfig(), ImmutableMap.of("mylocation.myconfigwithflagname", "myval", "myconfigflagname", "myval"));
-        assertEquals(loc.getLocalConfigBag().getAllConfig(), ImmutableMap.of("mylocation.myconfigwithflagname", "myval", "myconfigflagname", "myval"));
+        assertEquals(loc.config().getBag().getAllConfig(), ImmutableMap.of("mylocation.myconfigwithflagname", "myval", "myconfigflagname", "myval"));
+        assertEquals(loc.config().getLocalBag().getAllConfig(), ImmutableMap.of("mylocation.myconfigwithflagname", "myval", "myconfigflagname", "myval"));
         assertEquals(loc.getAllConfig(true), ImmutableMap.of("mylocation.myconfigwithflagname", "myval", "myconfigflagname", "myval"));
         assertEquals(loc.getAllConfig(false), ImmutableMap.of("mylocation.myconfigwithflagname", "myval", "myconfigflagname", "myval"));
     }
@@ -80,8 +80,8 @@ public class LocationConfigTest {
         LocationInternal loc = managementContext.getLocationManager().createLocation(LocationSpec.create(MyLocation.class)
                 .configure("notThere", "notThereVal"));
         
-        assertEquals(loc.getAllConfigBag().getAllConfig(), ImmutableMap.of("notThere", "notThereVal"));
-        assertEquals(loc.getLocalConfigBag().getAllConfig(), ImmutableMap.of("notThere", "notThereVal"));
+        assertEquals(loc.config().getBag().getAllConfig(), ImmutableMap.of("notThere", "notThereVal"));
+        assertEquals(loc.config().getLocalBag().getAllConfig(), ImmutableMap.of("notThere", "notThereVal"));
         assertEquals(loc.getAllConfig(true), ImmutableMap.of("notThere", "notThereVal"));
         assertEquals(loc.getAllConfig(false), ImmutableMap.of("notThere", "notThereVal"));
     }
@@ -96,8 +96,8 @@ public class LocationConfigTest {
         LocationInternal child = managementContext.getLocationManager().createLocation(LocationSpec.create(MyChildLocation.class)
                 .parent(loc));
 
-        assertEquals(child.getAllConfigBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfig", "myval1", "notThere", "notThereVal"));
-        assertEquals(child.getLocalConfigBag().getAllConfig(), ImmutableMap.of());
+        assertEquals(child.config().getBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfig", "myval1", "notThere", "notThereVal"));
+        assertEquals(child.config().getLocalBag().getAllConfig(), ImmutableMap.of());
         assertEquals(child.getAllConfig(true), ImmutableMap.of("mychildlocation.myconfig", "myval1", "notThere", "notThereVal"));
         assertEquals(child.getAllConfig(false), ImmutableMap.of());
     }
@@ -111,8 +111,8 @@ public class LocationConfigTest {
         LocationInternal child = managementContext.getLocationManager().createLocation(LocationSpec.create(MyChildLocation.class)
                 .parent(loc));
 
-        assertEquals(child.getAllConfigBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "myval"));
-        assertEquals(child.getLocalConfigBag().getAllConfig(), ImmutableMap.of());
+        assertEquals(child.config().getBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "myval"));
+        assertEquals(child.config().getLocalBag().getAllConfig(), ImmutableMap.of());
         assertEquals(child.getAllConfig(true), ImmutableMap.of("mychildlocation.myconfigwithflagname", "myval"));
         assertEquals(child.getAllConfig(false), ImmutableMap.of());
     }
@@ -125,8 +125,8 @@ public class LocationConfigTest {
         LocationInternal child = managementContext.getLocationManager().createLocation(LocationSpec.create(MyChildLocation.class)
                 .parent(loc));
 
-        assertEquals(child.getAllConfigBag().getAllConfig(), ImmutableMap.of("mylocation.myconfig", "myval1"));
-        assertEquals(child.getLocalConfigBag().getAllConfig(), ImmutableMap.of());
+        assertEquals(child.config().getBag().getAllConfig(), ImmutableMap.of("mylocation.myconfig", "myval1"));
+        assertEquals(child.config().getLocalBag().getAllConfig(), ImmutableMap.of());
         assertEquals(child.getAllConfig(true), ImmutableMap.of("mylocation.myconfig", "myval1"));
         assertEquals(child.getAllConfig(false), ImmutableMap.of());
     }
@@ -142,8 +142,8 @@ public class LocationConfigTest {
                 .configure("mychildlocation.myconfigwithflagname", "overrideMyval")
                 .configure("notThere", "overrideNotThereVal"));
 
-        assertEquals(child.getAllConfigBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "notThere", "overrideNotThereVal"));
-        assertEquals(child.getLocalConfigBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "notThere", "overrideNotThereVal"));
+        assertEquals(child.config().getBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "notThere", "overrideNotThereVal"));
+        assertEquals(child.config().getLocalBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "notThere", "overrideNotThereVal"));
         assertEquals(child.getAllConfig(true), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "notThere", "overrideNotThereVal"));
         assertEquals(child.getAllConfig(false), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "notThere", "overrideNotThereVal"));
     }
@@ -158,8 +158,8 @@ public class LocationConfigTest {
                 .parent(loc)
                 .configure("mychildconfigflagname", "overrideMyval"));
 
-        assertEquals(child.getAllConfigBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "mychildconfigflagname", "overrideMyval"));
-        assertEquals(child.getLocalConfigBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "mychildconfigflagname", "overrideMyval"));
+        assertEquals(child.config().getBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "mychildconfigflagname", "overrideMyval"));
+        assertEquals(child.config().getLocalBag().getAllConfig(), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "mychildconfigflagname", "overrideMyval"));
         assertEquals(child.getAllConfig(true), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "mychildconfigflagname", "overrideMyval"));
         assertEquals(child.getAllConfig(false), ImmutableMap.of("mychildlocation.myconfigwithflagname", "overrideMyval", "mychildconfigflagname", "overrideMyval"));
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/location/basic/SingleMachineLocationResolverTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/SingleMachineLocationResolverTest.java b/core/src/test/java/brooklyn/location/basic/SingleMachineLocationResolverTest.java
index 0f62d22..d62971f 100644
--- a/core/src/test/java/brooklyn/location/basic/SingleMachineLocationResolverTest.java
+++ b/core/src/test/java/brooklyn/location/basic/SingleMachineLocationResolverTest.java
@@ -99,7 +99,7 @@ public class SingleMachineLocationResolverTest {
         // prefer location-generic if nothing else
         brooklynProperties.put("brooklyn.location.privateKeyData", "privateKeyData-inGeneric");
 
-        Map<String, Object> conf = resolve("named:mynamed").obtain(ImmutableMap.of()).getAllConfig(true);
+        Map<String, Object> conf = resolve("named:mynamed").obtain(ImmutableMap.of()).config().getBag().getAllConfig();
         
         assertEquals(conf.get("privateKeyFile"), "privateKeyFile-inNamed");
         assertEquals(conf.get("privateKeyData"), "privateKeyData-inGeneric");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/policy/basic/BasicPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/policy/basic/BasicPolicyTest.java b/core/src/test/java/brooklyn/policy/basic/BasicPolicyTest.java
index 9f3ae9e..89872be 100644
--- a/core/src/test/java/brooklyn/policy/basic/BasicPolicyTest.java
+++ b/core/src/test/java/brooklyn/policy/basic/BasicPolicyTest.java
@@ -58,8 +58,8 @@ public class BasicPolicyTest extends BrooklynAppUnitTestSupport {
     public void testAddInstance() throws Exception {
         MyPolicy policy = new MyPolicy();
         policy.setDisplayName("Bob");
-        policy.setConfig(MyPolicy.STR_KEY, "aval");
-        policy.setConfig(MyPolicy.INT_KEY, 2);
+        policy.config().set(MyPolicy.STR_KEY, "aval");
+        policy.config().set(MyPolicy.INT_KEY, 2);
         app.addPolicy(policy);
         
         assertEquals(policy.getDisplayName(), "Bob");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/core/src/test/java/brooklyn/policy/basic/PolicyConfigTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/policy/basic/PolicyConfigTest.java b/core/src/test/java/brooklyn/policy/basic/PolicyConfigTest.java
index 502881b..c601e09 100644
--- a/core/src/test/java/brooklyn/policy/basic/PolicyConfigTest.java
+++ b/core/src/test/java/brooklyn/policy/basic/PolicyConfigTest.java
@@ -108,8 +108,8 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testConfigCanBeSetOnPolicy() throws Exception {
         MyPolicy policy = new MyPolicy();
-        policy.setConfig(MyPolicy.STR_KEY, "aval");
-        policy.setConfig(MyPolicy.INT_KEY, 2);
+        policy.config().set(MyPolicy.STR_KEY, "aval");
+        policy.config().set(MyPolicy.INT_KEY, 2);
         app.addPolicy(policy);
         
         assertEquals(policy.getConfig(MyPolicy.STR_KEY), "aval");
@@ -121,7 +121,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
         MyPolicy policy = new MyPolicy(MutableMap.builder()
                 .put(MyPolicy.STR_KEY, "aval")
                 .build());
-        policy.setConfig(MyPolicy.STR_KEY, "diffval");
+        policy.config().set(MyPolicy.STR_KEY, "diffval");
         app.addPolicy(policy);
         
         assertEquals(policy.getConfig(MyPolicy.STR_KEY), "diffval");
@@ -135,7 +135,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
         app.addPolicy(policy);
         
         try {
-            policy.setConfig(MyPolicy.STR_KEY,"newval");
+            policy.config().set(MyPolicy.STR_KEY,"newval");
             fail();
         } catch (UnsupportedOperationException e) {
             // success

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/examples/simple-web-cluster/src/test/java/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/test/java/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java b/examples/simple-web-cluster/src/test/java/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
index 19edba9..d388193 100644
--- a/examples/simple-web-cluster/src/test/java/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
+++ b/examples/simple-web-cluster/src/test/java/brooklyn/demo/RebindWebClusterDatabaseExampleAppIntegrationTest.java
@@ -162,7 +162,7 @@ public class RebindWebClusterDatabaseExampleAppIntegrationTest extends RebindTes
         // expect auto-scaler policy to be there, and to be functional (e.g. can trigger resize)
         AutoScalerPolicy autoScalerPolicy = (AutoScalerPolicy) Iterables.find(webCluster.getPolicies(), Predicates.instanceOf(AutoScalerPolicy.class));
         
-        autoScalerPolicy.setConfig(AutoScalerPolicy.MIN_POOL_SIZE, 3);
+        autoScalerPolicy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 3);
         EntityTestUtils.assertGroupSizeEqualsEventually(web, 3);
         final Collection<Entity> webMembersAfterGrow = web.getMembers();
         
@@ -190,7 +190,7 @@ public class RebindWebClusterDatabaseExampleAppIntegrationTest extends RebindTes
         EntityTestUtils.assertAttributeChangesEventually(web, HttpLatencyDetector.REQUEST_LATENCY_IN_SECONDS_IN_WINDOW);
 
         // Restore the web-cluster to its original size of 2
-        autoScalerPolicy.setConfig(AutoScalerPolicy.MIN_POOL_SIZE, 2);
+        autoScalerPolicy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 2);
         EntityTestUtils.assertGroupSizeEqualsEventually(web, 2);
         
         final Entity removedAppserver = Iterables.getOnlyElement(Sets.difference(ImmutableSet.copyOf(webMembersAfterGrow), ImmutableSet.copyOf(web.getMembers())));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsByonLocationResolver.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsByonLocationResolver.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsByonLocationResolver.java
index 674d360..b60ddc9 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsByonLocationResolver.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsByonLocationResolver.java
@@ -140,7 +140,7 @@ public class JcloudsByonLocationResolver implements LocationResolver {
                     .putIfNotNull("privateKeyFile", privateKeyFile)
                     .build();
             try {
-                JcloudsSshMachineLocation machine = jcloudsLocation.rebindMachine(jcloudsLocation.getAllConfigBag().putAll(machineFlags));
+                JcloudsSshMachineLocation machine = jcloudsLocation.rebindMachine(jcloudsLocation.config().getBag().putAll(machineFlags));
                 machines.add(machine);
             } catch (NoMachinesAvailableException e) {
                 log.warn("Error rebinding to jclouds machine "+hostIdentifier+" in "+jcloudsLocation, e);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
index 37272d4..0914ebf 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
@@ -51,7 +51,6 @@ import java.util.regex.Pattern;
 
 import javax.annotation.Nullable;
 
-import com.google.common.reflect.TypeToken;
 import org.jclouds.abiquo.compute.options.AbiquoTemplateOptions;
 import org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions;
 import org.jclouds.compute.ComputeService;
@@ -173,6 +172,7 @@ import com.google.common.collect.Sets.SetView;
 import com.google.common.io.Files;
 import com.google.common.net.HostAndPort;
 import com.google.common.primitives.Ints;
+import com.google.common.reflect.TypeToken;
 
 /**
  * For provisioning and managing VMs in a particular provider/region, using jclouds.
@@ -224,11 +224,10 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
     public JcloudsLocation configure(Map<?,?> properties) {
         super.configure(properties);
         
-        if (getLocalConfigBag().containsKey("providerLocationId")) {
+        if (config().getLocalBag().containsKey("providerLocationId")) {
             LOG.warn("Using deprecated 'providerLocationId' key in "+this);
-            if (!getLocalConfigBag().containsKey(CLOUD_REGION_ID))
-                // FIXME modifies getLocalConfigBag result, expecting that to set it on actual location
-                getLocalConfigBag().put(CLOUD_REGION_ID, (String)getLocalConfigBag().getStringKey("providerLocationId"));
+            if (!config().getLocalBag().containsKey(CLOUD_REGION_ID))
+                config().addToLocalBag(MutableMap.of(CLOUD_REGION_ID.getName(), (String)config().getLocalBag().getStringKey("providerLocationId")));
         }
         
         if (isDisplayNameAutoGenerated() || !groovyTruth(getDisplayName())) {
@@ -237,7 +236,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
                    (groovyTruth(getEndpoint()) ? ":"+getEndpoint() : ""));
         }
         
-        setCreationString(getLocalConfigBag());
+        setCreationString(config().getLocalBag());
         
         if (getConfig(MACHINE_CREATION_SEMAPHORE) == null) {
             Integer maxConcurrent = getConfig(MAX_CONCURRENT_MACHINE_CREATIONS);
@@ -267,7 +266,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
         // TODO should be able to use ConfigBag.newInstanceExtending; would require moving stuff around to api etc
         return (JcloudsLocation) getManagementContext().getLocationManager().createLocation(LocationSpec.create(type)
                 .parent(this)
-                .configure(getLocalConfigBag().getAllConfig())  // FIXME Should this just be inherited?
+                .configure(config().getLocalBag().getAllConfig())  // FIXME Should this just be inherited?
                 .configure(MACHINE_CREATION_SEMAPHORE, getMachineCreationSemaphore())
                 .configure(newFlags));
     }
@@ -275,7 +274,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
     @Override
     public String toString() {
         Object identity = getIdentity();
-        String configDescription = getLocalConfigBag().getDescription();
+        String configDescription = config().getLocalBag().getDescription();
         if (configDescription!=null && configDescription.startsWith(getClass().getSimpleName()))
             return configDescription;
         return getClass().getSimpleName()+"["+getDisplayName()+":"+(identity != null ? identity : null)+
@@ -286,7 +285,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
     public String toVerboseString() {
         return Objects.toStringHelper(this).omitNullValues()
                 .add("id", getId()).add("name", getDisplayName()).add("identity", getIdentity())
-                .add("description", getLocalConfigBag().getDescription()).add("provider", getProvider())
+                .add("description", config().getLocalBag().getDescription()).add("provider", getProvider())
                 .add("region", getRegion()).add("endpoint", getEndpoint())
                 .toString();
     }
@@ -309,7 +308,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
     }
 
     public String getEndpoint() {
-        return (String) getAllConfigBag().getWithDeprecation(CLOUD_ENDPOINT, JCLOUDS_KEY_ENDPOINT);
+        return (String) config().getBag().getWithDeprecation(CLOUD_ENDPOINT, JCLOUDS_KEY_ENDPOINT);
     }
 
     public String getUser(ConfigBag config) {
@@ -440,8 +439,8 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
     }
     public ComputeService getComputeService(Map<?,?> flags) {
         ConfigBag conf = (flags==null || flags.isEmpty()) 
-                ? getAllConfigBag()
-                : ConfigBag.newInstanceExtending(getAllConfigBag(), flags);
+                ? config().getBag()
+                : ConfigBag.newInstanceExtending(config().getBag(), flags);
         return getConfig(COMPUTE_SERVICE_REGISTRY).findComputeService(conf, true);
     }
     
@@ -524,7 +523,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
      * plus any further properties to specify e.g. images, hardware profiles, accessing user
      * (for initial login, and a user potentially to create for subsequent ie normal access) */
     public JcloudsSshMachineLocation obtain(Map<?,?> flags) throws NoMachinesAvailableException {
-        ConfigBag setup = ConfigBag.newInstanceExtending(getAllConfigBag(), flags);
+        ConfigBag setup = ConfigBag.newInstanceExtending(config().getBag(), flags);
         Integer attempts = setup.get(MACHINE_CREATE_ATTEMPTS);
         List<Exception> exceptions = Lists.newArrayList();
         if (attempts == null || attempts < 1) attempts = 1;
@@ -1530,7 +1529,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
         return rebindMachine(MutableMap.of(), metadata);
     }
     public JcloudsSshMachineLocation rebindMachine(Map<?,?> flags, NodeMetadata metadata) throws NoMachinesAvailableException {
-        ConfigBag setup = ConfigBag.newInstanceExtending(getAllConfigBag(), flags);
+        ConfigBag setup = ConfigBag.newInstanceExtending(config().getBag(), flags);
         if (!setup.containsKey("id")) setup.putStringKey("id", metadata.getId());
         setHostnameUpdatingCredentials(setup, metadata);
         return rebindMachine(setup);
@@ -1612,7 +1611,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
     }
 
     public JcloudsSshMachineLocation rebindMachine(Map<?,?> flags) throws NoMachinesAvailableException {
-        ConfigBag setup = ConfigBag.newInstanceExtending(getAllConfigBag(), flags);
+        ConfigBag setup = ConfigBag.newInstanceExtending(config().getBag(), flags);
         return rebindMachine(setup);
     }
 
@@ -1812,7 +1811,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
     protected void releaseNode(String instanceId) {
         ComputeService computeService = null;
         try {
-            computeService = getConfig(COMPUTE_SERVICE_REGISTRY).findComputeService(getAllConfigBag(), true);
+            computeService = getConfig(COMPUTE_SERVICE_REGISTRY).findComputeService(config().getBag(), true);
             computeService.destroyNode(instanceId);
         } finally {
         /*

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
index 56d863e..c715ad5 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
@@ -163,7 +163,7 @@ public class JcloudsSshMachineLocation extends SshMachineLocation implements Has
     /** In most clouds, the public hostname is the only way to ensure VMs in different zones can access each other. */
     @Override
     public String getSubnetHostname() {
-        String publicHostname = jcloudsParent.getPublicHostname(node, Optional.<HostAndPort>absent(), getAllConfigBag());
+        String publicHostname = jcloudsParent.getPublicHostname(node, Optional.<HostAndPort>absent(), config().getBag());
         return publicHostname;
     }
 
@@ -174,7 +174,7 @@ public class JcloudsSshMachineLocation extends SshMachineLocation implements Has
             return privateAddress.get();
         }
 
-        String hostname = jcloudsParent.getPublicHostname(node, Optional.<HostAndPort>absent(), getAllConfigBag());
+        String hostname = jcloudsParent.getPublicHostname(node, Optional.<HostAndPort>absent(), config().getBag());
         if (hostname != null && !Networking.isValidIp4(hostname)) {
             try {
                 return InetAddress.getByName(hostname).getHostAddress();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsByonLocationResolverAwsLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsByonLocationResolverAwsLiveTest.java b/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsByonLocationResolverAwsLiveTest.java
index 7e12f5a..ae2ec25 100644
--- a/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsByonLocationResolverAwsLiveTest.java
+++ b/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsByonLocationResolverAwsLiveTest.java
@@ -88,7 +88,7 @@ public class JcloudsByonLocationResolverAwsLiveTest extends AbstractJcloudsLiveT
         assertEquals(machine.getAddress().getHostAddress(), awsVmIp);
         assertEquals(machine.getAddress().getHostName(), awsVmHostname);
         assertEquals(machine.getUser(), awsVmUser);
-        assertEquals(machine.getAllConfig(true).get("anotherprop"), "myval");
+        assertEquals(machine.config().getBag().getStringKey("anotherprop"), "myval");
         
         assertTrue(machine.isSshable());
     }
@@ -158,7 +158,7 @@ public class JcloudsByonLocationResolverAwsLiveTest extends AbstractJcloudsLiveT
         brooklynProperties.put("brooklyn.jclouds.aws-ec2.private-key-passphrase", "privateKeyPassphrase-inProviderSpecific");
         brooklynProperties.put("brooklyn.jclouds.private-key-passphrase", "privateKeyPassphrase-inJcloudsGeneric");
 
-        Map<String, Object> conf = resolve("named:mynamed").obtain().getAllConfig(true);
+        Map<String, Object> conf = resolve("named:mynamed").obtain().config().getBag().getAllConfig();
         
         assertEquals(conf.get("user"), awsVmUser);
         assertEquals(conf.get("privateKeyFile"), "privateKeyFile-inNamed");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsLocationResolverTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsLocationResolverTest.java b/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsLocationResolverTest.java
index 6196d59..e31b954 100644
--- a/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsLocationResolverTest.java
+++ b/locations/jclouds/src/test/java/brooklyn/location/jclouds/JcloudsLocationResolverTest.java
@@ -76,7 +76,7 @@ public class JcloudsLocationResolverTest {
         brooklynProperties.put("brooklyn.location.jclouds.aws-ec2.privateKeyData", "myprivateKeyData");
         brooklynProperties.put("brooklyn.location.jclouds.aws-ec2.publicKeyData", "myPublicKeyData");
         brooklynProperties.put("brooklyn.location.jclouds.aws-ec2.privateKeyPassphrase", "myprivateKeyPassphrase");
-        Map<String, Object> conf = resolve("jclouds:aws-ec2").getAllConfig(true);
+        Map<String, Object> conf = resolve("jclouds:aws-ec2").config().getBag().getAllConfig();
 
         assertEquals(conf.get("privateKeyFile"), "myprivatekeyfile");
         assertEquals(conf.get("publicKeyFile"), "mypublickeyfile");
@@ -92,7 +92,7 @@ public class JcloudsLocationResolverTest {
         brooklynProperties.put("brooklyn.location.jclouds.privateKeyData", "myprivateKeyData");
         brooklynProperties.put("brooklyn.location.jclouds.publicKeyData", "myPublicKeyData");
         brooklynProperties.put("brooklyn.location.jclouds.privateKeyPassphrase", "myprivateKeyPassphrase");
-        Map<String, Object> conf = resolve("jclouds:aws-ec2").getAllConfig(true);
+        Map<String, Object> conf = resolve("jclouds:aws-ec2").config().getBag().getAllConfig();
 
         assertEquals(conf.get("privateKeyFile"), "myprivatekeyfile");
         assertEquals(conf.get("publicKeyFile"), "mypublickeyfile");
@@ -109,7 +109,7 @@ public class JcloudsLocationResolverTest {
         brooklynProperties.put("brooklyn.location.jclouds.public-key-data", "myPublicKeyData");
         brooklynProperties.put("brooklyn.location.jclouds.private-key-passphrase", "myprivateKeyPassphrase");
         brooklynProperties.put("brooklyn.location.jclouds.image-id", "myimageid");
-        Map<String, Object> conf = resolve("jclouds:aws-ec2").getAllConfig(true);
+        Map<String, Object> conf = resolve("jclouds:aws-ec2").config().getBag().getAllConfig();
 
         assertEquals(conf.get("privateKeyFile"), "myprivatekeyfile");
         assertEquals(conf.get("publicKeyFile"), "mypublickeyfile");
@@ -148,7 +148,7 @@ public class JcloudsLocationResolverTest {
                 "privateKeyPassphrase-inProviderSpecific");
         brooklynProperties.put("brooklyn.location.jclouds.private-key-passphrase", "privateKeyPassphrase-inJcloudsGeneric");
 
-        Map<String, Object> conf = resolve("named:myaws-ec2").getAllConfig(true);
+        Map<String, Object> conf = resolve("named:myaws-ec2").config().getBag().getAllConfig();
 
         assertEquals(conf.get("privateKeyFile"), "privateKeyFile-inNamed");
         assertEquals(conf.get("publicKeyFile"), "publicKeyFile-inProviderSpecific");
@@ -189,7 +189,7 @@ public class JcloudsLocationResolverTest {
         brooklynProperties.put("brooklyn.location.jclouds.openstack-nova.endpoint", "myendpoint");
         JcloudsLocation loc = resolve("jclouds:openstack-nova");
         // just checking
-        assertEquals(loc.getLocalConfigBag().getStringKey("endpoint"), "myendpoint");
+        assertEquals(loc.config().getLocalBag().getStringKey("endpoint"), "myendpoint");
         assertEquals(loc.getConfig(CloudLocationConfig.CLOUD_ENDPOINT), "myendpoint");
         // this is the one we really care about!:
         assertEquals(loc.getEndpoint(), "myendpoint");
@@ -199,14 +199,14 @@ public class JcloudsLocationResolverTest {
     public void testJcloudsLegacyRandomProperty() {
         brooklynProperties.put("brooklyn.location.jclouds.openstack-nova.foo", "bar");
         JcloudsLocation loc = resolve("jclouds:openstack-nova");
-        assertEquals(loc.getLocalConfigBag().getStringKey("foo"), "bar");
+        assertEquals(loc.config().getLocalBag().getStringKey("foo"), "bar");
     }
 
     @Test
     public void testJcloudsRandomProperty() {
         brooklynProperties.put("brooklyn.location.jclouds.openstack-nova.foo", "bar");
         JcloudsLocation loc = resolve("jclouds:openstack-nova");
-        assertEquals(loc.getLocalConfigBag().getStringKey("foo"), "bar");
+        assertEquals(loc.config().getLocalBag().getStringKey("foo"), "bar");
     }
 
     @Test
@@ -275,9 +275,9 @@ public class JcloudsLocationResolverTest {
         
         JcloudsLocation l = resolve("named:bar");
         assertJcloudsEquals(l, "softlayer", "138124");
-        assertEquals(l.getAllConfig(false).get("prop3"), "3");
-        assertEquals(l.getAllConfig(false).get("prop2"), "2");
-        assertEquals(l.getAllConfig(false).get("prop1"), "1");
+        assertEquals(l.config().getLocalBag().getStringKey("prop3"), "3");
+        assertEquals(l.config().getLocalBag().getStringKey("prop2"), "2");
+        assertEquals(l.config().getLocalBag().getStringKey("prop1"), "1");
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/locations/jclouds/src/test/java/brooklyn/location/jclouds/LiveTestEntity.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/location/jclouds/LiveTestEntity.java b/locations/jclouds/src/test/java/brooklyn/location/jclouds/LiveTestEntity.java
index feb4aca..837e7a6 100644
--- a/locations/jclouds/src/test/java/brooklyn/location/jclouds/LiveTestEntity.java
+++ b/locations/jclouds/src/test/java/brooklyn/location/jclouds/LiveTestEntity.java
@@ -28,6 +28,7 @@ import brooklyn.entity.proxying.ImplementedBy;
 import brooklyn.location.Location;
 import brooklyn.location.MachineProvisioningLocation;
 import brooklyn.location.NoMachinesAvailableException;
+import brooklyn.location.basic.LocationInternal;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.test.entity.TestEntityImpl;
 
@@ -57,7 +58,7 @@ public interface LiveTestEntity extends TestEntity {
             addLocations(locs);
             provisioningLocation = (JcloudsLocation) Iterables.find(locs, Predicates.instanceOf(JcloudsLocation.class));
             try {
-                obtainedLocation = provisioningLocation.obtain(provisioningLocation.getAllConfig(true));
+                obtainedLocation = provisioningLocation.obtain(((LocationInternal)provisioningLocation).config().getBag().getAllConfig());
             } catch (NoMachinesAvailableException e) {
                 throw Throwables.propagate(e);
             }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java b/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java
index 14aa1fa..da27ab2 100644
--- a/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java
+++ b/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationLiveTest.java
@@ -102,7 +102,7 @@ public class RebindJcloudsLocationLiveTest extends AbstractJcloudsLiveTest {
         assertOsDetailEquals(actual.getOsDetails(), expected.getOsDetails());
         assertEquals(actual.getSshHostAndPort(), expected.getSshHostAndPort());
         assertEquals(actual.getPrivateAddress(), expected.getPrivateAddress());
-        assertConfigBagEquals(actual.getAllConfigBag(), expected.getAllConfigBag(), errmsg);
+        assertConfigBagEquals(actual.config().getBag(), expected.config().getBag(), errmsg);
     }
 
     private void assertOsDetailEquals(OsDetails actual, OsDetails expected) {
@@ -125,7 +125,7 @@ public class RebindJcloudsLocationLiveTest extends AbstractJcloudsLiveTest {
         assertEquals(actual.getIdentity(), expected.getIdentity(), errmsg);
         assertEquals(actual.getCredential(), expected.getCredential(), errmsg);
         assertEquals(actual.getHostGeoInfo(), expected.getHostGeoInfo(), errmsg);
-        assertConfigBagEquals(actual.getAllConfigBag(), expected.getAllConfigBag(), errmsg);
+        assertConfigBagEquals(actual.config().getBag(), expected.config().getBag(), errmsg);
     }
 
     private void assertConfigBagEquals(ConfigBag actual, ConfigBag expected, String errmsg) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationTest.java b/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationTest.java
index e779ddb..7ce0ad3 100644
--- a/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationTest.java
+++ b/locations/jclouds/src/test/java/brooklyn/location/jclouds/RebindJcloudsLocationTest.java
@@ -52,7 +52,7 @@ public class RebindJcloudsLocationTest extends RebindTestFixtureWithApp {
         
         JcloudsLocation newLoc = (JcloudsLocation) newManagementContext.getLocationManager().getLocation(origLoc.getId());
         
-        ConfigBag newLocConfig = newLoc.getAllConfigBag();
+        ConfigBag newLocConfig = newLoc.config().getBag();
         ConfigBag config = ConfigBag.newInstanceCopying(newLocConfig);
         
         assertNull(newLocConfig.getStringKey(("id")));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java b/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
index a5f0ded..835e9b7 100644
--- a/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
+++ b/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
@@ -435,12 +435,12 @@ public class AutoScalerPolicy extends AbstractPolicy {
 
     public void setMetricLowerBound(Number val) {
         if (LOG.isInfoEnabled()) LOG.info("{} changing metricLowerBound from {} to {}", new Object[] {this, getMetricLowerBound(), val});
-        setConfig(METRIC_LOWER_BOUND, checkNotNull(val));
+        config().set(METRIC_LOWER_BOUND, checkNotNull(val));
     }
     
     public void setMetricUpperBound(Number val) {
         if (LOG.isInfoEnabled()) LOG.info("{} changing metricUpperBound from {} to {}", new Object[] {this, getMetricUpperBound(), val});
-        setConfig(METRIC_UPPER_BOUND, checkNotNull(val));
+        config().set(METRIC_UPPER_BOUND, checkNotNull(val));
     }
     
     /**
@@ -452,7 +452,7 @@ public class AutoScalerPolicy extends AbstractPolicy {
 
     public void setMinPeriodBetweenExecs(Duration val) {
         if (LOG.isInfoEnabled()) LOG.info("{} changing minPeriodBetweenExecs from {} to {}", new Object[] {this, getMinPeriodBetweenExecs(), val});
-        setConfig(MIN_PERIOD_BETWEEN_EXECS, val);
+        config().set(MIN_PERIOD_BETWEEN_EXECS, val);
     }
 
     /**
@@ -464,7 +464,7 @@ public class AutoScalerPolicy extends AbstractPolicy {
     
     public void setResizeUpStabilizationDelay(Duration val) {
         if (LOG.isInfoEnabled()) LOG.info("{} changing resizeUpStabilizationDelay from {} to {}", new Object[] {this, getResizeUpStabilizationDelay(), val});
-        setConfig(RESIZE_UP_STABILIZATION_DELAY, val);
+        config().set(RESIZE_UP_STABILIZATION_DELAY, val);
     }
     
     /**
@@ -476,17 +476,17 @@ public class AutoScalerPolicy extends AbstractPolicy {
     
     public void setResizeDownStabilizationDelay(Duration val) {
         if (LOG.isInfoEnabled()) LOG.info("{} changing resizeDownStabilizationDelay from {} to {}", new Object[] {this, getResizeDownStabilizationDelay(), val});
-        setConfig(RESIZE_DOWN_STABILIZATION_DELAY, val);
+        config().set(RESIZE_DOWN_STABILIZATION_DELAY, val);
     }
     
     public void setMinPoolSize(int val) {
         if (LOG.isInfoEnabled()) LOG.info("{} changing minPoolSize from {} to {}", new Object[] {this, getMinPoolSize(), val});
-        setConfig(MIN_POOL_SIZE, val);
+        config().set(MIN_POOL_SIZE, val);
     }
     
     public void setMaxPoolSize(int val) {
         if (LOG.isInfoEnabled()) LOG.info("{} changing maxPoolSize from {} to {}", new Object[] {this, getMaxPoolSize(), val});
-        setConfig(MAX_POOL_SIZE, val);
+        config().set(MAX_POOL_SIZE, val);
     }
     
     private AttributeSensor<? extends Number> getMetric() {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java b/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
index 6591977..e801803 100644
--- a/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
+++ b/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
@@ -65,7 +65,7 @@ public class AutoScalerPolicyReconfigurationTest {
                 .build();
         tc.addPolicy(policy);
 
-        policy.setConfig(AutoScalerPolicy.MIN_POOL_SIZE, 3);
+        policy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 3);
         
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 3));
     }
@@ -85,7 +85,7 @@ public class AutoScalerPolicyReconfigurationTest {
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
 
         // Decreases to new min-size
-        policy.setConfig(AutoScalerPolicy.MIN_POOL_SIZE, 1);
+        policy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 1);
         tc.setAttribute(MY_ATTRIBUTE, 0);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1));
     }
@@ -100,7 +100,7 @@ public class AutoScalerPolicyReconfigurationTest {
                 .build();
         tc.addPolicy(policy);
 
-        policy.setConfig(AutoScalerPolicy.MAX_POOL_SIZE, 4);
+        policy.config().set(AutoScalerPolicy.MAX_POOL_SIZE, 4);
         
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 4));
     }
@@ -119,7 +119,7 @@ public class AutoScalerPolicyReconfigurationTest {
         tc.setAttribute(MY_ATTRIBUTE, 200);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 6));
         
-        policy.setConfig(AutoScalerPolicy.MAX_POOL_SIZE, 8);
+        policy.config().set(AutoScalerPolicy.MAX_POOL_SIZE, 8);
         
         // Increases to max-size only
         tc.setAttribute(MY_ATTRIBUTE, 100000);
@@ -135,7 +135,7 @@ public class AutoScalerPolicyReconfigurationTest {
                 .build();
         tc.addPolicy(policy);
 
-        policy.setConfig(AutoScalerPolicy.METRIC_LOWER_BOUND, 51);
+        policy.config().set(AutoScalerPolicy.METRIC_LOWER_BOUND, 51);
 
         tc.setAttribute(MY_ATTRIBUTE, 50);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1));
@@ -150,7 +150,7 @@ public class AutoScalerPolicyReconfigurationTest {
                 .build();
         tc.addPolicy(policy);
 
-        policy.setConfig(AutoScalerPolicy.METRIC_UPPER_BOUND, 99);
+        policy.config().set(AutoScalerPolicy.METRIC_UPPER_BOUND, 99);
 
         tc.setAttribute(MY_ATTRIBUTE, 100);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
@@ -166,7 +166,7 @@ public class AutoScalerPolicyReconfigurationTest {
                 .build();
         tc.addPolicy(policy);
 
-        policy.setConfig(AutoScalerPolicy.RESIZE_UP_STABILIZATION_DELAY, Duration.ZERO);
+        policy.config().set(AutoScalerPolicy.RESIZE_UP_STABILIZATION_DELAY, Duration.ZERO);
 
         tc.setAttribute(MY_ATTRIBUTE, 101);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 2));
@@ -182,7 +182,7 @@ public class AutoScalerPolicyReconfigurationTest {
                 .build();
         tc.addPolicy(policy);
 
-        policy.setConfig(AutoScalerPolicy.RESIZE_DOWN_STABILIZATION_DELAY, Duration.ZERO);
+        policy.config().set(AutoScalerPolicy.RESIZE_DOWN_STABILIZATION_DELAY, Duration.ZERO);
 
         tc.setAttribute(MY_ATTRIBUTE, 1);
         Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(tc, 1));

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
index 378e662..a4b3f5d 100644
--- a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
@@ -292,7 +292,7 @@ public abstract class MachineLifecycleEffectorTasks {
                         if (log.isDebugEnabled())
                             log.debug("While starting {}, obtained new location instance {}", entity(),
                                     (machine instanceof SshMachineLocation ?
-                                            machine+", details "+((SshMachineLocation)machine).getUser()+":"+Entities.sanitize(((SshMachineLocation)machine).getLocalConfigBag())
+                                            machine+", details "+((SshMachineLocation)machine).getUser()+":"+Entities.sanitize(((SshMachineLocation)machine).config().getLocalBag())
                                             : machine));
                         return machine;
                     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/software/base/src/main/java/brooklyn/entity/software/SshEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/software/SshEffectorTasks.java b/software/base/src/main/java/brooklyn/entity/software/SshEffectorTasks.java
index c2b0bb9..7d1474f 100644
--- a/software/base/src/main/java/brooklyn/entity/software/SshEffectorTasks.java
+++ b/software/base/src/main/java/brooklyn/entity/software/SshEffectorTasks.java
@@ -290,7 +290,7 @@ public class SshEffectorTasks {
         allConfig.putAll(globalConfig.getAllConfig());
         
         if (optionalLocation!=null)
-            allConfig.putAll(((LocationInternal)optionalLocation).getAllConfigBag());
+            allConfig.putAll(((LocationInternal)optionalLocation).config().getBag());
         
         allConfig.putAll(((EntityInternal)entity).getAllConfig());
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
index 8e453ba..0984071 100644
--- a/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/dns/AbstractGeoDnsServiceTest.java
@@ -221,7 +221,7 @@ public class AbstractGeoDnsServiceTest {
             SshMachineLocation l = Machines.findUniqueSshMachineLocation(e.getLocations()).get();
             if (includeAddress)
                 ((EntityInternal)e).setAttribute(Attributes.ADDRESS, l.getAddress().getHostAddress());
-            String h = (String) l.getAllConfigBag().getStringKey("hostname");
+            String h = (String) l.config().getBag().getStringKey("hostname");
             if (h==null) h = l.getAddress().getHostName();
             if (includeHostname)
                 ((EntityInternal)e).setAttribute(Attributes.HOSTNAME, h);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/LocationsYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/LocationsYamlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/LocationsYamlTest.java
index dce5d6f..d22b73e 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/LocationsYamlTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/LocationsYamlTest.java
@@ -113,7 +113,7 @@ public class LocationsYamlTest extends AbstractYamlTest {
         Entity app = createStartWaitAndLogApplication(new StringReader(yaml));
         LocalhostMachineProvisioningLocation loc = (LocalhostMachineProvisioningLocation) Iterables.getOnlyElement(app.getLocations());
         assertEquals(loc.getDisplayName(), "myname");
-        assertEquals(loc.getAllConfig(false).get("myconfkey"), "myconfval");
+        assertEquals(loc.config().getLocalBag().getStringKey("myconfkey"), "myconfval");
     }
 
     @Test
@@ -135,9 +135,9 @@ public class LocationsYamlTest extends AbstractYamlTest {
         LocalhostMachineProvisioningLocation loc1 = (LocalhostMachineProvisioningLocation) locs.get(0);
         LocalhostMachineProvisioningLocation loc2 = (LocalhostMachineProvisioningLocation) locs.get(1);
         assertEquals(loc1.getDisplayName(), "myname1");
-        assertEquals(loc1.getAllConfig(false).get("myconfkey"), "myconfval1");
+        assertEquals(loc1.config().getLocalBag().getStringKey("myconfkey"), "myconfval1");
         assertEquals(loc2.getDisplayName(), "myname2");
-        assertEquals(loc2.getAllConfig(false).get("myconfkey"), "myconfval2");
+        assertEquals(loc2.config().getLocalBag().getStringKey("myconfkey"), "myconfval2");
     }
 
     // TODO Fails because PlanInterpretationContext constructor throws NPE on location's value (using ImmutableMap).


[8/9] incubator-brooklyn git commit: Configurable.config(): incorporate review comments

Posted by al...@apache.org.
Configurable.config(): incorporate review comments


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/1ed5484e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/1ed5484e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/1ed5484e

Branch: refs/heads/master
Commit: 1ed5484e07b580e1daca7cbd3ce8ba9f9c2243fd
Parents: 73c4985
Author: Aled Sage <al...@gmail.com>
Authored: Thu Jan 8 23:04:09 2015 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 18 11:02:35 2015 +0000

----------------------------------------------------------------------
 .../java/brooklyn/basic/BrooklynObject.java     | 57 +-----------------
 .../java/brooklyn/entity/basic/EntityLocal.java |  2 +-
 .../brooklyn/entity/trait/Configurable.java     | 59 ++++++++++++++++++-
 .../brooklyn/basic/BasicConfigurableObject.java | 55 +++++++++++++++---
 .../catalog/internal/CatalogItemDo.java         |  6 ++
 .../internal/CatalogItemDtoAbstract.java        |  8 ++-
 .../access/PortForwardManagerClient.java        | 10 ++++
 ...DynamicClusterWithAvailabilityZonesTest.java |  1 +
 .../brooklyn/util/internal/FlagUtilsTest.java   | 45 ++++++++++++++-
 .../brooklyn/camp/brooklyn/ObjectsYamlTest.java | 61 +++++++++++++++++---
 10 files changed, 230 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/api/src/main/java/brooklyn/basic/BrooklynObject.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/basic/BrooklynObject.java b/api/src/main/java/brooklyn/basic/BrooklynObject.java
index 798d454..cb80695 100644
--- a/api/src/main/java/brooklyn/basic/BrooklynObject.java
+++ b/api/src/main/java/brooklyn/basic/BrooklynObject.java
@@ -22,18 +22,15 @@ import java.util.Set;
 
 import javax.annotation.Nonnull;
 
-import brooklyn.config.ConfigKey;
-import brooklyn.config.ConfigKey.HasConfigKey;
+import brooklyn.entity.trait.Configurable;
 import brooklyn.entity.trait.Identifiable;
-import brooklyn.management.Task;
 
-import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableMap;
 
 /**
  * Super-type of entity, location, policy and enricher.
  */
-public interface BrooklynObject extends Identifiable {
+public interface BrooklynObject extends Identifiable, Configurable {
     
     /**
      * A display name; recommended to be a concise single-line description.
@@ -67,8 +64,6 @@ public interface BrooklynObject extends Identifiable {
     @Deprecated
     TagSupport getTagSupport();
     
-    ConfigurationSupport config();
-    
     public interface TagSupport {
         /**
          * @return An immutable copy of the set of tags on this entity. 
@@ -85,52 +80,4 @@ public interface BrooklynObject extends Identifiable {
         
         boolean removeTag(@Nonnull Object tag);
     }
-
-    @Beta
-    public interface ConfigurationSupport {
-
-        /**
-         * Gets the given configuration value for this entity, in the following order of preference:
-         * <ol>
-         *   <li> value (including null) explicitly set on the entity
-         *   <li> value (including null) explicitly set on an ancestor (inherited)
-         *   <li> a default value (including null) on the best equivalent static key of the same name declared on the entity
-         *        (where best equivalence is defined as preferring a config key which extends another, 
-         *        as computed in EntityDynamicType.getConfigKeys)
-         *   <li> a default value (including null) on the key itself
-         *   <li> null
-         * </ol>
-         */
-        <T> T get(ConfigKey<T> key);
-        
-        /**
-         * @see {@link #getConfig(ConfigKey)}
-         */
-        <T> T get(HasConfigKey<T> key);
-
-        /**
-         * Sets the config to the given value.
-         */
-        <T> T set(ConfigKey<T> key, T val);
-        
-        /**
-         * @see {@link #setConfig(HasConfigKey, Object)}
-         */
-        <T> T set(HasConfigKey<T> key, T val);
-        
-        /**
-         * Sets the config to the value returned by the task.
-         * 
-         * Returns immediately without blocking; subsequent calls to {@link #getConfig(ConfigKey)} 
-         * will execute the task, and block until the task completes.
-         * 
-         * @see {@link #setConfig(ConfigKey, Object)}
-         */
-        <T> T set(ConfigKey<T> key, Task<T> val);
-        
-        /**
-         * @see {@link #setConfig(ConfigKey, Task)}
-         */
-        <T> T set(HasConfigKey<T> key, Task<T> val);
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/api/src/main/java/brooklyn/entity/basic/EntityLocal.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/basic/EntityLocal.java b/api/src/main/java/brooklyn/entity/basic/EntityLocal.java
index 266e572..dd7affc 100644
--- a/api/src/main/java/brooklyn/entity/basic/EntityLocal.java
+++ b/api/src/main/java/brooklyn/entity/basic/EntityLocal.java
@@ -48,7 +48,7 @@ import com.google.common.base.Function;
  * FIXME Add {@link setAttribute(AttributeSensorAndConfigKey<?,T>)} back in if/when move it back,
  * or if we extract an interface for AttributeSensorAndConfigKey.
  */
-public interface EntityLocal extends Entity, Configurable {
+public interface EntityLocal extends Entity {
     
     // FIXME Rename to something other than EntityLocal.
     // Separate out what is specific to "local jvm", and what is here for an SPI rather than API.

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/api/src/main/java/brooklyn/entity/trait/Configurable.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/trait/Configurable.java b/api/src/main/java/brooklyn/entity/trait/Configurable.java
index 11f22ae..84f1922 100644
--- a/api/src/main/java/brooklyn/entity/trait/Configurable.java
+++ b/api/src/main/java/brooklyn/entity/trait/Configurable.java
@@ -19,6 +19,10 @@
 package brooklyn.entity.trait;
 
 import brooklyn.config.ConfigKey;
+import brooklyn.config.ConfigKey.HasConfigKey;
+import brooklyn.management.Task;
+
+import com.google.common.annotations.Beta;
 
 /**
  * Something that has mutable config, such as an entity or policy.
@@ -30,7 +34,60 @@ public interface Configurable {
     // FIXME Moved from core project to api project, as part of moving EntityLocal.
     // (though maybe it's fine here?)
 
-    /** returns the old value, or null if there was not one */
+    /**
+     * @return the old value, or null if there was not one
+     * @deprecated since 0.7.0; use {@link ConfigurationSupport#set(ConfigKey, Object)}, such as {@code config().set(key, val)} 
+     */
+    @Deprecated
     public <T> T setConfig(ConfigKey<T> key, T val);
 
+    ConfigurationSupport config();
+    
+    @Beta
+    public interface ConfigurationSupport {
+
+        /**
+         * Gets the given configuration value for this entity, in the following order of preference:
+         * <ol>
+         *   <li> value (including null) explicitly set on the entity
+         *   <li> value (including null) explicitly set on an ancestor (inherited)
+         *   <li> a default value (including null) on the best equivalent static key of the same name declared on the entity
+         *        (where best equivalence is defined as preferring a config key which extends another, 
+         *        as computed in EntityDynamicType.getConfigKeys)
+         *   <li> a default value (including null) on the key itself
+         *   <li> null
+         * </ol>
+         */
+        <T> T get(ConfigKey<T> key);
+        
+        /**
+         * @see {@link #getConfig(ConfigKey)}
+         */
+        <T> T get(HasConfigKey<T> key);
+
+        /**
+         * Sets the config to the given value.
+         */
+        <T> T set(ConfigKey<T> key, T val);
+        
+        /**
+         * @see {@link #setConfig(HasConfigKey, Object)}
+         */
+        <T> T set(HasConfigKey<T> key, T val);
+        
+        /**
+         * Sets the config to the value returned by the task.
+         * 
+         * Returns immediately without blocking; subsequent calls to {@link #getConfig(ConfigKey)} 
+         * will execute the task, and block until the task completes.
+         * 
+         * @see {@link #setConfig(ConfigKey, Object)}
+         */
+        <T> T set(ConfigKey<T> key, Task<T> val);
+        
+        /**
+         * @see {@link #setConfig(ConfigKey, Task)}
+         */
+        <T> T set(HasConfigKey<T> key, Task<T> val);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/core/src/main/java/brooklyn/basic/BasicConfigurableObject.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/basic/BasicConfigurableObject.java b/core/src/main/java/brooklyn/basic/BasicConfigurableObject.java
index f4910f1..5d1bc95 100644
--- a/core/src/main/java/brooklyn/basic/BasicConfigurableObject.java
+++ b/core/src/main/java/brooklyn/basic/BasicConfigurableObject.java
@@ -20,6 +20,8 @@ package brooklyn.basic;
 
 import brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
 import brooklyn.config.ConfigKey;
+import brooklyn.config.ConfigKey.HasConfigKey;
+import brooklyn.config.ConfigMap;
 import brooklyn.entity.trait.Configurable;
 import brooklyn.entity.trait.Identifiable;
 import brooklyn.management.ManagementContext;
@@ -44,10 +46,10 @@ public class BasicConfigurableObject implements Configurable, Identifiable, Mana
     private String id = Identifiers.makeRandomId(8);
 
     private volatile ManagementContext managementContext;
-    private ConfigBag config;
-
+    private BasicConfigurationSupport config;
+    
     public BasicConfigurableObject() {
-        config = ConfigBag.newInstance();
+        config = new BasicConfigurationSupport();
     }
 
     @Override
@@ -65,14 +67,53 @@ public class BasicConfigurableObject implements Configurable, Identifiable, Mana
     }
 
     @Override
+    public ConfigurationSupport config() {
+        return config;
+    }
+
+    @Override
+    @Deprecated
     public <T> T setConfig(ConfigKey<T> key, T value) {
-        T old = config.get(key);
-        config.configure(key, value);
-        return old;
+        return config().set(key, value);
     }
 
     public <T> T getConfig(ConfigKey<T> key) {
-        return config.get(key);
+        return config().get(key);
     }
 
+    private static class BasicConfigurationSupport implements ConfigurationSupport {
+        private final ConfigBag config = ConfigBag.newInstance();
+
+        @Override
+        public <T> T get(ConfigKey<T> key) {
+            return config.get(key);
+        }
+
+        @Override
+        public <T> T get(HasConfigKey<T> key) {
+            return get(key.getConfigKey());
+        }
+
+        @Override
+        public <T> T set(ConfigKey<T> key, T val) {
+            T old = config.get(key);
+            config.configure(key, val);
+            return old;
+        }
+
+        @Override
+        public <T> T set(HasConfigKey<T> key, T val) {
+            return set(key.getConfigKey(), val);
+        }
+
+        @Override
+        public <T> T set(ConfigKey<T> key, Task<T> val) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public <T> T set(HasConfigKey<T> key, Task<T> val) {
+            return set(key.getConfigKey(), val);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
index 494bfb0..b38d560 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
@@ -25,6 +25,7 @@ import javax.annotation.Nullable;
 
 import brooklyn.basic.BrooklynObjectInternal;
 import brooklyn.catalog.CatalogItem;
+import brooklyn.config.ConfigKey;
 import brooklyn.entity.rebind.RebindSupport;
 import brooklyn.management.ManagementContext;
 import brooklyn.mementos.CatalogItemMemento;
@@ -56,6 +57,11 @@ public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT>, BrooklynObj
     }
 
     @Override
+    public <U> U setConfig(ConfigKey<U> key, U val) {
+        return config().set(key, val);
+    }
+
+    @Override
     public CatalogItemType getCatalogItemType() {
         return itemDto.getCatalogItemType();
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
index cf23c26..521f4d6 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
@@ -31,6 +31,7 @@ import org.slf4j.LoggerFactory;
 
 import brooklyn.basic.AbstractBrooklynObject;
 import brooklyn.catalog.CatalogItem;
+import brooklyn.config.ConfigKey;
 import brooklyn.entity.rebind.BasicCatalogItemRebindSupport;
 import brooklyn.entity.rebind.RebindSupport;
 import brooklyn.mementos.CatalogItemMemento;
@@ -69,7 +70,12 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
     public ConfigurationSupportInternal config() {
         throw new UnsupportedOperationException();
     }
-        
+    
+    @Override
+    public <U> U setConfig(ConfigKey<U> key, U val) {
+        return config().set(key, val);
+    }
+    
     @Override
     public String getId() {
         return getCatalogItemId();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/core/src/main/java/brooklyn/location/access/PortForwardManagerClient.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/access/PortForwardManagerClient.java b/core/src/main/java/brooklyn/location/access/PortForwardManagerClient.java
index 7b7c091..ddd1040 100644
--- a/core/src/main/java/brooklyn/location/access/PortForwardManagerClient.java
+++ b/core/src/main/java/brooklyn/location/access/PortForwardManagerClient.java
@@ -387,4 +387,14 @@ public class PortForwardManagerClient implements PortForwardManager {
     public TagSupport getTagSupport() {
         return getDelegate().getTagSupport();
     }
+
+    @Override
+    public <T> T setConfig(ConfigKey<T> key, T val) {
+        return getDelegate().setConfig(key, val);
+    }
+
+    @Override
+    public ConfigurationSupport config() {
+        return getDelegate().config();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java b/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
index dc16335..c2b8dec 100644
--- a/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
+++ b/core/src/test/java/brooklyn/entity/group/DynamicClusterWithAvailabilityZonesTest.java
@@ -33,6 +33,7 @@ import org.testng.annotations.Test;
 
 import brooklyn.entity.BrooklynAppUnitTestSupport;
 import brooklyn.entity.Entity;
+import brooklyn.entity.basic.EntityLocal;
 import brooklyn.entity.basic.EntityPredicates;
 import brooklyn.entity.group.zoneaware.ProportionalZoneFailureDetector;
 import brooklyn.entity.proxying.EntitySpec;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/core/src/test/java/brooklyn/util/internal/FlagUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/util/internal/FlagUtilsTest.java b/core/src/test/java/brooklyn/util/internal/FlagUtilsTest.java
index 2510eda..3dda990 100644
--- a/core/src/test/java/brooklyn/util/internal/FlagUtilsTest.java
+++ b/core/src/test/java/brooklyn/util/internal/FlagUtilsTest.java
@@ -33,9 +33,11 @@ import org.slf4j.LoggerFactory;
 import org.testng.annotations.Test;
 
 import brooklyn.config.ConfigKey;
+import brooklyn.config.ConfigKey.HasConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.trait.Configurable;
 import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.management.Task;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.config.ConfigBag;
 import brooklyn.util.flags.FlagUtils;
@@ -264,8 +266,49 @@ public class FlagUtilsTest {
         int f1;
         
         ConfigBag bag = new ConfigBag();
+        BasicConfigurationSupport configSupport = new BasicConfigurationSupport();
+        
+        @Override
+        public ConfigurationSupport config() {
+            return configSupport;
+        }
+        
         public <T> T setConfig(ConfigKey<T> key, T val) {
-            return bag.put(key, val);
+            return config().set(key, val);
+        }
+        
+        private class BasicConfigurationSupport implements ConfigurationSupport {
+            @Override
+            public <T> T get(ConfigKey<T> key) {
+                return bag.get(key);
+            }
+
+            @Override
+            public <T> T get(HasConfigKey<T> key) {
+                return get(key.getConfigKey());
+            }
+
+            @Override
+            public <T> T set(ConfigKey<T> key, T val) {
+                T old = bag.get(key);
+                bag.configure(key, val);
+                return old;
+            }
+
+            @Override
+            public <T> T set(HasConfigKey<T> key, T val) {
+                return set(key.getConfigKey(), val);
+            }
+
+            @Override
+            public <T> T set(ConfigKey<T> key, Task<T> val) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public <T> T set(HasConfigKey<T> key, Task<T> val) {
+                return set(key.getConfigKey(), val);
+            }
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1ed5484e/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java
index 21eb7a6..6f5a968 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java
@@ -26,9 +26,8 @@ import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.Lists;
-
 import brooklyn.config.ConfigKey;
+import brooklyn.config.ConfigKey.HasConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.basic.Entities;
@@ -36,10 +35,14 @@ import brooklyn.entity.proxy.ProxySslConfig;
 import brooklyn.entity.trait.Configurable;
 import brooklyn.management.ManagementContext;
 import brooklyn.management.ManagementContextInjectable;
+import brooklyn.management.Task;
 import brooklyn.test.entity.TestEntity;
+import brooklyn.util.config.ConfigBag;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.flags.TypeCoercions;
 
+import com.google.common.collect.Lists;
+
 @Test
 public class ObjectsYamlTest extends AbstractYamlTest {
     private static final Logger log = LoggerFactory.getLogger(ObjectsYamlTest.class);
@@ -81,7 +84,8 @@ public class ObjectsYamlTest extends AbstractYamlTest {
         private Integer number;
         private Object object;
         private Double value;
-
+        BasicConfigurationSupport configSupport = new BasicConfigurationSupport();
+        
         public ConfigurableObject() { }
 
         public String getString() { return string; }
@@ -95,11 +99,52 @@ public class ObjectsYamlTest extends AbstractYamlTest {
 
         @Override
         public <T> T setConfig(ConfigKey<T> key, T value) {
-            log.info("Detected configuration injection for {}: {}", key.getName(), value);
-            configKeys.add(key.getName());
-            if ("config.number".equals(key.getName())) number = TypeCoercions.coerce(value, Integer.class);
-            if ("config.object".equals(key.getName())) object = value;
-            return value;
+            return config().set(key, value);
+        }
+        
+        @Override
+        public ConfigurationSupport config() {
+            return configSupport;
+        }
+        
+        private class BasicConfigurationSupport implements ConfigurationSupport {
+            private final ConfigBag bag = new ConfigBag();
+            
+            @Override
+            public <T> T get(ConfigKey<T> key) {
+                return bag.get(key);
+            }
+
+            @Override
+            public <T> T get(HasConfigKey<T> key) {
+                return get(key.getConfigKey());
+            }
+
+            @Override
+            public <T> T set(ConfigKey<T> key, T val) {
+                log.info("Detected configuration injection for {}: {}", key.getName(), val);
+                configKeys.add(key.getName());
+                if ("config.number".equals(key.getName())) number = TypeCoercions.coerce(val, Integer.class);
+                if ("config.object".equals(key.getName())) object = val;
+                T old = bag.get(key);
+                bag.configure(key, val);
+                return old;
+            }
+
+            @Override
+            public <T> T set(HasConfigKey<T> key, T val) {
+                return set(key.getConfigKey(), val);
+            }
+
+            @Override
+            public <T> T set(ConfigKey<T> key, Task<T> val) {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public <T> T set(HasConfigKey<T> key, Task<T> val) {
+                return set(key.getConfigKey(), val);
+            }
         }
     }
 


[2/9] incubator-brooklyn git commit: config: cleanup usage + deprecate

Posted by al...@apache.org.
config: cleanup usage + deprecate

- Deprecates ConfigMap.getConfig(HasConfigKey, defaultVal) and 
  ConfigMap.getConfig(ConfigKey, defaultVal).
- Remove more usages of deprecated methods
- Declare 
- EntityTransientCopyInternal: mark methods as deprecated, and adds
  TODO about feeds() / config() which return objects that have mutator
  methods.
- AbstractEntityAdjunct.configsInternal and .adjunctType: deprecate, 
  so can make private or change in future version.


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

Branch: refs/heads/master
Commit: b944f83f67872e717c7cd66bdab93d7560dd65f3
Parents: b12e08d
Author: Aled Sage <al...@gmail.com>
Authored: Tue Feb 10 08:38:21 2015 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 18 11:02:35 2015 +0000

----------------------------------------------------------------------
 .../java/brooklyn/entity/basic/Entities.java    |  7 ++---
 .../basic/EntityTransientCopyInternal.java      | 10 ++++---
 .../location/basic/AbstractLocation.java        |  2 +-
 .../policy/basic/AbstractEntityAdjunct.java     |  9 ++++++-
 .../policy/autoscaling/AutoScalerPolicy.java    |  2 +-
 .../main/java/brooklyn/config/ConfigMap.java    | 28 ++++++++++++++------
 6 files changed, 40 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b944f83f/core/src/main/java/brooklyn/entity/basic/Entities.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/Entities.java b/core/src/main/java/brooklyn/entity/basic/Entities.java
index cdf1a01..f8fff24 100644
--- a/core/src/main/java/brooklyn/entity/basic/Entities.java
+++ b/core/src/main/java/brooklyn/entity/basic/Entities.java
@@ -42,6 +42,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import brooklyn.basic.BrooklynObjectInternal;
 import brooklyn.config.BrooklynProperties;
 import brooklyn.config.ConfigKey;
 import brooklyn.config.ConfigKey.HasConfigKey;
@@ -316,7 +317,7 @@ public class Entities {
             ConfigKey<?> realKey = e.getEntityType().getConfigKey(it.getName());
             if (realKey!=null) it = realKey;
 
-            Maybe<Object> mv = ((EntityInternal)e).getConfigMap().getConfigRaw(it, false);
+            Maybe<Object> mv = ((EntityInternal)e).config().getLocalRaw(it);
             if (!isTrivial(mv)) {
                 Object v = mv.get();
                 out.append(currentIndentation+tab+tab+it.getName());
@@ -456,7 +457,7 @@ public class Entities {
         out.append(currentIndentation+enr.toString()+"\n");
 
         for (ConfigKey<?> key : sortConfigKeys(enr.getEnricherType().getConfigKeys())) {
-            Maybe<Object> val = ((AbstractEnricher)enr).getConfigMap().getConfigRaw(key, true);
+            Maybe<Object> val = ((BrooklynObjectInternal)enr).config().getRaw(key);
             if (!isTrivial(val)) {
                 out.append(currentIndentation+tab+tab+key);
                 out.append(" = ");
@@ -487,7 +488,7 @@ public class Entities {
         out.append(currentIndentation+pol.toString()+"\n");
 
         for (ConfigKey<?> key : sortConfigKeys(pol.getPolicyType().getConfigKeys())) {
-            Maybe<Object> val = ((AbstractPolicy)pol).getConfigMap().getConfigRaw(key, true);
+            Maybe<Object> val = ((BrooklynObjectInternal)pol).config().getRaw(key);
             if (!isTrivial(val)) {
                 out.append(currentIndentation+tab+tab+key);
                 out.append(" = ");

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b944f83f/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java b/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java
index ef2a9ee..14b9736 100644
--- a/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java
+++ b/core/src/main/java/brooklyn/entity/basic/EntityTransientCopyInternal.java
@@ -60,6 +60,8 @@ import com.google.common.annotations.Beta;
 @Beta
 public interface EntityTransientCopyInternal {
 
+    // TODO For feeds() and config(), need to ensure mutator methods on returned object are not invoked.
+    
     // from Entity
     
     String getId();
@@ -95,11 +97,11 @@ public interface EntityTransientCopyInternal {
     
     // from EntityInternal:
     
-    EntityConfigMap getConfigMap();
-    Map<ConfigKey<?>,Object> getAllConfig();
+    @Deprecated EntityConfigMap getConfigMap();
+    @Deprecated Map<ConfigKey<?>,Object> getAllConfig();
     // for rebind mainly:
-    ConfigBag getAllConfigBag();
-    ConfigBag getLocalConfigBag();
+    @Deprecated ConfigBag getAllConfigBag();
+    @Deprecated ConfigBag getLocalConfigBag();
     @SuppressWarnings("rawtypes")
     Map<AttributeSensor, Object> getAllAttributes();
     EntityManagementSupport getManagementSupport();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b944f83f/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
index 9513cde..a576a60 100644
--- a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
@@ -401,7 +401,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
         public ConfigBag getBag() {
             ConfigBag result = ConfigBag.newInstanceExtending(configBag, ImmutableMap.of());
             Location p = getParent();
-            if (p!=null) result.putIfAbsent(((LocationInternal)p).config().getBag().getAllConfig());
+            if (p!=null) result.putIfAbsent(((LocationInternal)p).config().getBag());
             return result;
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b944f83f/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
index 4488560..bbd589d 100644
--- a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
+++ b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
@@ -82,10 +82,17 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple
     
     /**
      * The config values of this entity. Updating this map should be done
-     * via getConfig/setConfig.
+     * via {@link #config()}.
+     * 
+     * @deprecated since 0.7.0; use {@link #config()} instead; this field may be made private or deleted in a future release.
      */
+    @Deprecated
     protected final ConfigMapImpl configsInternal = new ConfigMapImpl(this);
 
+    /**
+     * @deprecated since 0.7.0; use {@link #getAdjunctType()} instead; this field may be made private or deleted in a future release.
+     */
+    @Deprecated
     protected final AdjunctType adjunctType = new AdjunctType(this);
 
     @SetFromFlag

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b944f83f/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java b/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
index 835e9b7..8727f54 100644
--- a/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
+++ b/policy/src/main/java/brooklyn/policy/autoscaling/AutoScalerPolicy.java
@@ -599,7 +599,7 @@ public class AutoScalerPolicy extends AbstractPolicy {
     
     @Override
     public void setEntity(EntityLocal entity) {
-        if (!configsInternal.getConfigRaw(RESIZE_OPERATOR, true).isPresentAndNonNull()) {
+        if (!config().getRaw(RESIZE_OPERATOR).isPresentAndNonNull()) {
             Preconditions.checkArgument(entity instanceof Resizable, "Provided entity must be an instance of Resizable, because no custom-resizer operator supplied");
         }
         super.setEntity(entity);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b944f83f/utils/common/src/main/java/brooklyn/config/ConfigMap.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/brooklyn/config/ConfigMap.java b/utils/common/src/main/java/brooklyn/config/ConfigMap.java
index c223b6e..eeb0fd0 100644
--- a/utils/common/src/main/java/brooklyn/config/ConfigMap.java
+++ b/utils/common/src/main/java/brooklyn/config/ConfigMap.java
@@ -29,14 +29,26 @@ public interface ConfigMap {
     
     /** @see #getConfig(ConfigKey, Object), with default value as per the key, or null */
     public <T> T getConfig(ConfigKey<T> key);
-    /** @see #getConfig(ConfigKey, Object), with default value as per the key, or null  */
+    
+    /** @see #getConfig(ConfigKey, Object), with default value as per the key, or null */
     public <T> T getConfig(HasConfigKey<T> key);
-    /** @see #getConfig(ConfigKey, Object), with provided default value if not set */
+    
+    /**
+     * @see #getConfig(ConfigKey, Object), with provided default value if not set
+     * @deprecated since 0.7.0; use {@link #getConfig(HasConfigKey)}
+     */
+    @Deprecated
     public <T> T getConfig(HasConfigKey<T> key, T defaultValue);
-    /** returns value stored against the given key,
+    
+    /**
+     * Returns value stored against the given key,
      * resolved (if it is a Task, possibly blocking), and coerced to the appropriate type, 
      * or given default value if not set, 
-     * unless the default value is null in which case it returns the default*/ 
+     * unless the default value is null in which case it returns the default.
+     * 
+     * @deprecated since 0.7.0; use {@link #getConfig(ConfigKey)}
+     */
+    @Deprecated
     public <T> T getConfig(ConfigKey<T> key, T defaultValue);
 
     /** as {@link #getConfigRaw(ConfigKey)} but returning null if not present 
@@ -46,13 +58,13 @@ public interface ConfigMap {
     
     /** returns the value stored against the given key, 
      * <b>not</b> any default,
-     * <b>not</b> resolved (and guaranteed non-blocking)
-     * and <b>not</b> type-coerced
+     * <b>not</b> resolved (and guaranteed non-blocking),
+     * and <b>not</b> type-coerced.
      * @param key  key to look up
      * @param includeInherited  for {@link ConfigMap} instances which have an inheritance hierarchy, 
-     * whether to traverse it or not; has no effects where there is no inheritance 
+     *        whether to traverse it or not; has no effects where there is no inheritance 
      * @return raw, unresolved, uncoerced value of key in map,  
-     * but <b>not</b> any default on the key
+     *         but <b>not</b> any default on the key
      */
     public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited);
 


[6/9] incubator-brooklyn git commit: Config refactor: minor fixes to javadoc

Posted by al...@apache.org.
Config refactor: minor fixes to javadoc


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/7a4e46b3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/7a4e46b3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/7a4e46b3

Branch: refs/heads/master
Commit: 7a4e46b3ed771f204ba8ca1f10c9d4a6f92d886c
Parents: b944f83
Author: Aled Sage <al...@gmail.com>
Authored: Wed Feb 18 11:02:09 2015 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 18 11:02:35 2015 +0000

----------------------------------------------------------------------
 api/src/main/java/brooklyn/entity/trait/Configurable.java        | 2 +-
 core/src/main/java/brooklyn/location/basic/LocationInternal.java | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a4e46b3/api/src/main/java/brooklyn/entity/trait/Configurable.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/trait/Configurable.java b/api/src/main/java/brooklyn/entity/trait/Configurable.java
index 84f1922..2f49014 100644
--- a/api/src/main/java/brooklyn/entity/trait/Configurable.java
+++ b/api/src/main/java/brooklyn/entity/trait/Configurable.java
@@ -47,7 +47,7 @@ public interface Configurable {
     public interface ConfigurationSupport {
 
         /**
-         * Gets the given configuration value for this entity, in the following order of preference:
+         * Gets the given configuration value for this entity, in the following order of precedence:
          * <ol>
          *   <li> value (including null) explicitly set on the entity
          *   <li> value (including null) explicitly set on an ancestor (inherited)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7a4e46b3/core/src/main/java/brooklyn/location/basic/LocationInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/LocationInternal.java b/core/src/main/java/brooklyn/location/basic/LocationInternal.java
index f54d0f1..3d9bc5d 100644
--- a/core/src/main/java/brooklyn/location/basic/LocationInternal.java
+++ b/core/src/main/java/brooklyn/location/basic/LocationInternal.java
@@ -72,7 +72,8 @@ public interface LocationInternal extends BrooklynObjectInternal, Location {
 
     /**
      * Returns all config, including that inherited from parents.
-     * TODO this method does not respect {@link ConfigInheritance} and so usage is discouraged.
+     * 
+     * This method does not respect {@link ConfigInheritance} and so usage is discouraged.
      * 
      * @deprecated since 0.7.0; use {@link #config()}, such as {@code ((LocationInternal)location).config().getBag()}
      */


[3/9] incubator-brooklyn git commit: Deprecate *Config methods in Location/Enricher/Policy

Posted by al...@apache.org.
Deprecate *Config methods in Location/Enricher/Policy


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/972ab83b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/972ab83b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/972ab83b

Branch: refs/heads/master
Commit: 972ab83babe298cd5866025748e918e583c8df66
Parents: 4c233de
Author: Aled Sage <al...@gmail.com>
Authored: Tue Nov 11 16:50:17 2014 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 18 11:02:35 2015 +0000

----------------------------------------------------------------------
 .../main/java/brooklyn/location/Location.java   | 27 +++++++++++++++++---
 api/src/main/java/brooklyn/policy/Enricher.java | 13 +++++++++-
 api/src/main/java/brooklyn/policy/Policy.java   | 11 ++++++++
 .../location/basic/AbstractLocation.java        | 23 ++++++++++++-----
 .../location/basic/LocationInternal.java        | 13 +++++++---
 .../policy/basic/AbstractEntityAdjunct.java     |  6 +++++
 6 files changed, 78 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/972ab83b/api/src/main/java/brooklyn/location/Location.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/location/Location.java b/api/src/main/java/brooklyn/location/Location.java
index fe9bf51..5707dbd 100644
--- a/api/src/main/java/brooklyn/location/Location.java
+++ b/api/src/main/java/brooklyn/location/Location.java
@@ -93,15 +93,34 @@ public interface Location extends Serializable, BrooklynObject {
      */
     boolean containsLocation(Location potentialDescendent);
 
-    /** Returns configuration set at this location or inherited or default */
+    /** 
+     * Returns configuration set at this location or inherited or default.
+     * 
+     * Convenience method for {@code config().get(key)}
+     */
     <T> T getConfig(ConfigKey<T> key);
-    
+
+    /**
+     * Convenience method for {@code config().get(key)}
+     * 
+     * @see {@link #getConfig(ConfigKey)}
+     */
     <T> T getConfig(HasConfigKey<T> key);
 
-    /** True iff the indication config key is set, either inherited (second argument true) or locally-only (second argument false) */
+    /** 
+     * True iff the indication config key is set, either inherited (second argument true) or locally-only (second argument false).
+     * 
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code ((LocationInternal)location).config().getRaw(key).isPresent()}
+     */
+    @Deprecated
     boolean hasConfig(ConfigKey<?> key, boolean includeInherited);
 
-    /** Returns all config set, either inherited (argument true) or locally-only (argument false) */
+    /** 
+     * Returns all config set, either inherited (argument true) or locally-only (argument false).
+     * 
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code policy.config().getBag()}
+     */
+    @Deprecated
     public Map<String,Object> getAllConfig(boolean includeInherited);
     
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/972ab83b/api/src/main/java/brooklyn/policy/Enricher.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/policy/Enricher.java b/api/src/main/java/brooklyn/policy/Enricher.java
index 0d6e87a..244af79 100644
--- a/api/src/main/java/brooklyn/policy/Enricher.java
+++ b/api/src/main/java/brooklyn/policy/Enricher.java
@@ -56,10 +56,21 @@ public interface Enricher extends EntityAdjunct, Rebindable, Configurable {
     @Beta
     EnricherType getEnricherType();
 
+    /**
+     * Convenience method for {@code config().get(key)}
+     */
     <T> T getConfig(ConfigKey<T> key);
-
+    
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code policy.config().setConfig(key, val)}
+     */
+    @Deprecated
     <T> T setConfig(ConfigKey<T> key, T val);
 
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code policy.config().getBag()}
+     */
+    @Deprecated
     Map<ConfigKey<?>, Object> getAllConfig();
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/972ab83b/api/src/main/java/brooklyn/policy/Policy.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/policy/Policy.java b/api/src/main/java/brooklyn/policy/Policy.java
index cc1bfa9..0713042 100644
--- a/api/src/main/java/brooklyn/policy/Policy.java
+++ b/api/src/main/java/brooklyn/policy/Policy.java
@@ -71,10 +71,21 @@ public interface Policy extends EntityAdjunct, Rebindable, Configurable {
      */
     boolean isSuspended();
     
+    /**
+     * Convenience method for {@code config().get(key)}
+     */
     <T> T getConfig(ConfigKey<T> key);
     
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code policy.config().setConfig(key, val)}
+     */
+    @Deprecated
     <T> T setConfig(ConfigKey<T> key, T val);
     
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code policy.config().getBag()}
+     */
+    @Deprecated
     Map<ConfigKey<?>, Object> getAllConfig();
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/972ab83b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
index fe592db..c6dde27 100644
--- a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
@@ -102,7 +102,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
 
     private Reference<HostGeoInfo> hostGeoInfo = new BasicReference<HostGeoInfo>();
 
-    private ConfigurationSupportInternal config = new BasicConfigurationSupport();
+    private BasicConfigurationSupport config = new BasicConfigurationSupport();
     
     private ConfigBag configBag = new ConfigBag();
 
@@ -401,7 +401,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
         public ConfigBag getBag() {
             ConfigBag result = ConfigBag.newInstanceExtending(configBag, ImmutableMap.of());
             Location p = getParent();
-            if (p!=null) result.putIfAbsent(((LocationInternal)p).getAllConfigBag().getAllConfig());
+            if (p!=null) result.putIfAbsent(((LocationInternal)p).config().getBag().getAllConfig());
             return result;
         }
 
@@ -447,6 +447,14 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
         public void refreshInheritedConfigOfChildren() {
             // no-op for location
         }
+        
+        private boolean hasConfig(ConfigKey<?> key, boolean includeInherited) {
+            if (includeInherited && isInherited(key)) {
+                return getBag().containsKey(key);
+            } else {
+                return getLocalBag().containsKey(key);
+            }
+        }
     }
     
     @Override
@@ -460,12 +468,9 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
     }
 
     @Override
+    @Deprecated
     public boolean hasConfig(ConfigKey<?> key, boolean includeInherited) {
-        boolean locally = config().getLocalBag().containsKey(key);
-        if (locally) return true;
-        if (!includeInherited || !isInherited(key)) return false;
-        if (getParent()!=null) return getParent().hasConfig(key, true);
-        return false;
+        return config.hasConfig(key, includeInherited);
     }
 
     private boolean isInherited(ConfigKey<?> key) {
@@ -479,12 +484,14 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
     }
 
     @Override
+    @Deprecated
     public Map<String,Object> getAllConfig(boolean includeInherited) {
         ConfigBag bag = (includeInherited ? config().getBag() : config().getLocalBag());
         return bag.getAllConfig();
     }
     
     @Override
+    @Deprecated
     public ConfigBag getAllConfigBag() {
         // TODO see comments in EntityConfigMap and on interface methods. 
         // here ConfigBag is used exclusively so
@@ -502,11 +509,13 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
      * @deprecated since 0.7; use {@link #getLocalConfigBag()}
      * @since 0.6
      */
+    @Deprecated
     public ConfigBag getRawLocalConfigBag() {
         return config().getLocalBag();
     }
     
     @Override
+    @Deprecated
     public <T> T setConfig(ConfigKey<T> key, T value) {
         return config().set(key, value);
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/972ab83b/core/src/main/java/brooklyn/location/basic/LocationInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/LocationInternal.java b/core/src/main/java/brooklyn/location/basic/LocationInternal.java
index 153bf93..f54d0f1 100644
--- a/core/src/main/java/brooklyn/location/basic/LocationInternal.java
+++ b/core/src/main/java/brooklyn/location/basic/LocationInternal.java
@@ -64,12 +64,19 @@ public interface LocationInternal extends BrooklynObjectInternal, Location {
      */
     public Map<String, String> toMetadataRecord();
 
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code ((LocationInternal)location).config().getLocalBag()}
+     */
+    @Deprecated
     ConfigBag getLocalConfigBag();
 
-    /** Returns all config, including that inherited from parents.
-     * TODO this method does not respect {@link ConfigInheritance} and so usage is discouraged.  
+    /**
+     * Returns all config, including that inherited from parents.
+     * TODO this method does not respect {@link ConfigInheritance} and so usage is discouraged.
+     * 
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code ((LocationInternal)location).config().getBag()}
      */
-    @Beta  // made beta in 0.7.0 due to inheritance problems
+    @Deprecated
     ConfigBag getAllConfigBag();
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/972ab83b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
index ba5ecd0..4488560 100644
--- a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
+++ b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
@@ -273,6 +273,10 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple
         return config().get(key);
     }
     
+    /**
+     * @deprecated since 0.7.0; use {@link #config()}, such as {@code entity.config().getBag()}
+     */
+    @Deprecated
     public Map<ConfigKey<?>, Object> getAllConfig() {
         return configsInternal.getAllConfig();
     }
@@ -282,6 +286,7 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple
     }
 
     @Override
+    @Deprecated
     public <T> T setConfig(ConfigKey<T> key, T val) {
         return config().set(key, val);
     }
@@ -289,6 +294,7 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple
     // TODO make immutable
     /** for inspection only */
     @Beta
+    @Deprecated
     public ConfigMap getConfigMap() {
         return configsInternal;
     }


[9/9] incubator-brooklyn git commit: This closes #320

Posted by al...@apache.org.
This closes #320


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/1d1cfe71
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/1d1cfe71
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/1d1cfe71

Branch: refs/heads/master
Commit: 1d1cfe713732292c95ae8fa71771f1bd2c4ff336
Parents: 6c72bd4 7a4e46b
Author: Aled Sage <al...@gmail.com>
Authored: Wed Feb 18 11:31:48 2015 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 18 11:31:48 2015 +0000

----------------------------------------------------------------------
 .../java/brooklyn/basic/BrooklynObject.java     |   6 +-
 api/src/main/java/brooklyn/entity/Entity.java   |  26 +-
 .../java/brooklyn/entity/basic/EntityLocal.java |  20 +-
 .../brooklyn/entity/trait/Configurable.java     |  59 +++-
 .../main/java/brooklyn/location/Location.java   |  27 +-
 api/src/main/java/brooklyn/policy/Enricher.java |  13 +-
 api/src/main/java/brooklyn/policy/Policy.java   |  11 +
 .../brooklyn/basic/BasicConfigurableObject.java |  55 +++-
 .../brooklyn/basic/BrooklynObjectInternal.java  |  67 +++++
 .../catalog/internal/CatalogItemDo.java         |  14 +
 .../internal/CatalogItemDtoAbstract.java        |  14 +
 .../brooklyn/entity/basic/AbstractEntity.java   | 280 ++++++++++++++-----
 .../java/brooklyn/entity/basic/Entities.java    |   9 +-
 .../brooklyn/entity/basic/EntityInternal.java   |  23 +-
 .../basic/EntityTransientCopyInternal.java      |  10 +-
 .../group/AbstractMembershipTrackingPolicy.java |   2 +-
 .../entity/proxying/InternalPolicyFactory.java  |   4 +-
 .../rebind/BasicLocationRebindSupport.java      |   7 +-
 .../entity/rebind/dto/MementosGenerators.java   |   2 +-
 .../access/PortForwardManagerClient.java        |  10 +
 .../location/basic/AbstractLocation.java        | 175 +++++++++---
 .../FixedListMachineProvisioningLocation.java   |   3 +-
 .../LocalhostMachineProvisioningLocation.java   |   2 +-
 .../location/basic/LocationInternal.java        |  14 +-
 .../brooklyn/location/basic/MultiLocation.java  |   2 +-
 .../location/basic/SimulatedLocation.java       |   2 +-
 .../location/basic/SshMachineLocation.java      |   7 +-
 ...bstractCloudMachineProvisioningLocation.java |   2 +-
 .../internal/LocalLocationManager.java          |   3 +-
 .../policy/basic/AbstractEntityAdjunct.java     | 128 ++++++++-
 .../brooklyn/policy/basic/ConfigMapImpl.java    |   7 +
 .../java/brooklyn/util/task/ssh/SshTasks.java   |   2 +-
 .../enricher/basic/BasicEnricherTest.java       |   4 +-
 .../enricher/basic/EnricherConfigTest.java      |   8 +-
 ...DynamicClusterWithAvailabilityZonesTest.java |   3 +-
 .../entity/rebind/RebindLocationTest.java       |   2 +-
 .../entity/rebind/RebindPolicyTest.java         |   2 +-
 .../basic/ByonLocationResolverTest.java         |  22 +-
 .../basic/HostLocationResolverTest.java         |   2 +-
 .../basic/LocalhostLocationResolverTest.java    |  16 +-
 .../location/basic/LocationConfigTest.java      |  32 +--
 .../SingleMachineLocationResolverTest.java      |   2 +-
 .../brooklyn/policy/basic/BasicPolicyTest.java  |   4 +-
 .../brooklyn/policy/basic/PolicyConfigTest.java |   8 +-
 .../brooklyn/util/internal/FlagUtilsTest.java   |  45 ++-
 ...lusterDatabaseExampleAppIntegrationTest.java |   4 +-
 .../jclouds/JcloudsByonLocationResolver.java    |   2 +-
 .../location/jclouds/JcloudsLocation.java       |  31 +-
 .../jclouds/JcloudsSshMachineLocation.java      |   4 +-
 .../JcloudsByonLocationResolverAwsLiveTest.java |   4 +-
 .../jclouds/JcloudsLocationResolverTest.java    |  20 +-
 .../location/jclouds/LiveTestEntity.java        |   3 +-
 .../jclouds/RebindJcloudsLocationLiveTest.java  |   4 +-
 .../jclouds/RebindJcloudsLocationTest.java      |   2 +-
 .../policy/autoscaling/AutoScalerPolicy.java    |  16 +-
 .../AutoScalerPolicyReconfigurationTest.java    |  16 +-
 .../software/MachineLifecycleEffectorTasks.java |   2 +-
 .../entity/software/SshEffectorTasks.java       |   2 +-
 .../entity/dns/AbstractGeoDnsServiceTest.java   |   2 +-
 .../camp/brooklyn/LocationsYamlTest.java        |   6 +-
 .../brooklyn/camp/brooklyn/ObjectsYamlTest.java |  61 +++-
 .../main/java/brooklyn/cli/CloudExplorer.java   |   2 +-
 .../webcluster/SinusoidalLoadGenerator.java     |   8 +-
 .../rest/resources/PolicyConfigResource.java    |   7 +-
 .../rest/transform/LocationTransformer.java     |  22 +-
 .../rest/resources/ApplicationResourceTest.java |   6 +-
 .../rest/util/EntityLocationUtilsTest.java      |   3 +-
 .../main/java/brooklyn/config/ConfigMap.java    |  28 +-
 68 files changed, 1093 insertions(+), 318 deletions(-)
----------------------------------------------------------------------



[7/9] incubator-brooklyn git commit: fixes for non-inherited config

Posted by al...@apache.org.
fixes for non-inherited config

- Fix Location’s getRaw(ConfigKey)
- Add comments


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

Branch: refs/heads/master
Commit: b12e08de992a00daad4178325f25f8d41d705313
Parents: 1ed5484
Author: Aled Sage <al...@gmail.com>
Authored: Tue Feb 10 08:10:23 2015 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 18 11:02:35 2015 +0000

----------------------------------------------------------------------
 .../brooklyn/basic/BrooklynObjectInternal.java  |  5 ++++
 .../location/basic/AbstractLocation.java        | 24 +++++++++++---------
 2 files changed, 18 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b12e08de/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java b/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
index 9575246..6115dd3 100644
--- a/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
+++ b/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
@@ -44,6 +44,11 @@ public interface BrooklynObjectInternal extends BrooklynObject, Rebindable {
         /**
          * Returns a read-only view of all the config key/value pairs on this entity, backed by a string-based map, 
          * including config names that did not match anything on this entity.
+         * 
+         * TODO This method gives no information about which config is inherited versus local;
+         * this means {@link ConfigKey#getInheritance()} cannot be respected. This is an unsolvable problem
+         * for "config names that did not match anything on this entity". Therefore consider using
+         * alternative getters.
          */
         @Beta
         ConfigBag getBag();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b12e08de/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
index c6dde27..9513cde 100644
--- a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
@@ -413,7 +413,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
         @Override
         public Maybe<Object> getRaw(ConfigKey<?> key) {
             if (hasConfig(key, false)) return Maybe.of(getLocalBag().getStringKey(key.getName()));
-            if (getParent() != null) return ((AbstractLocation)getParent()).config().getRaw(key);
+            if (getParent() != null && isInherited(key)) return ((LocationInternal)getParent()).config().getRaw(key);
             return Maybe.absent();
         }
 
@@ -455,6 +455,16 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
                 return getLocalBag().containsKey(key);
             }
         }
+        
+        private boolean isInherited(ConfigKey<?> key) {
+            ConfigInheritance inheritance = key.getInheritance();
+            if (inheritance==null) inheritance = getDefaultInheritance();
+            return inheritance.isInherited(key, getParent(), AbstractLocation.this);
+        }
+
+        private ConfigInheritance getDefaultInheritance() {
+            return ConfigInheritance.ALWAYS;
+        }
     }
     
     @Override
@@ -473,19 +483,11 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements
         return config.hasConfig(key, includeInherited);
     }
 
-    private boolean isInherited(ConfigKey<?> key) {
-        ConfigInheritance inheritance = key.getInheritance();
-        if (inheritance==null) inheritance = getDefaultInheritance();
-        return inheritance.isInherited(key, getParent(), this);
-    }
-
-    private ConfigInheritance getDefaultInheritance() {
-        return ConfigInheritance.ALWAYS;
-    }
-
     @Override
     @Deprecated
     public Map<String,Object> getAllConfig(boolean includeInherited) {
+        // TODO Have no information about what to include/exclude inheritance wise.
+        // however few things use getAllConfigBag()
         ConfigBag bag = (includeInherited ? config().getBag() : config().getLocalBag());
         return bag.getAllConfig();
     }


[4/9] incubator-brooklyn git commit: Use {location, policy, enricher}.config(), instead of newly deprecated methods

Posted by al...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/usage/cli/src/main/java/brooklyn/cli/CloudExplorer.java
----------------------------------------------------------------------
diff --git a/usage/cli/src/main/java/brooklyn/cli/CloudExplorer.java b/usage/cli/src/main/java/brooklyn/cli/CloudExplorer.java
index 8f2f375..3dd8462 100644
--- a/usage/cli/src/main/java/brooklyn/cli/CloudExplorer.java
+++ b/usage/cli/src/main/java/brooklyn/cli/CloudExplorer.java
@@ -245,7 +245,7 @@ public class CloudExplorer {
             failIfArguments();
             ComputeService computeService = loc.getComputeService();
             
-            Template template = loc.buildTemplate(computeService, loc.getAllConfigBag());
+            Template template = loc.buildTemplate(computeService, loc.config().getBag());
             Image image = template.getImage();
             Hardware hardware = template.getHardware();
             org.jclouds.domain.Location location = template.getLocation();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/usage/qa/src/test/java/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/test/java/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java b/usage/qa/src/test/java/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java
index 0d4d9fd..392b976 100644
--- a/usage/qa/src/test/java/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java
+++ b/usage/qa/src/test/java/brooklyn/qa/longevity/webcluster/SinusoidalLoadGenerator.java
@@ -57,10 +57,10 @@ public class SinusoidalLoadGenerator extends AbstractEnricher {
     }
     
     public SinusoidalLoadGenerator(AttributeSensor<Double> target, long publishPeriodMs, long sinPeriodMs, double sinAmplitude) {
-        setConfig(TARGET, target);
-        setConfig(PUBLISH_PERIOD_MS, publishPeriodMs);
-        setConfig(SIN_PERIOD_MS, sinPeriodMs);
-        setConfig(SIN_AMPLITUDE, sinAmplitude);
+        config().set(TARGET, target);
+        config().set(PUBLISH_PERIOD_MS, publishPeriodMs);
+        config().set(SIN_PERIOD_MS, sinPeriodMs);
+        config().set(SIN_AMPLITUDE, sinAmplitude);
         this.executor = Executors.newSingleThreadScheduledExecutor();
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/usage/rest-server/src/main/java/brooklyn/rest/resources/PolicyConfigResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/PolicyConfigResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/PolicyConfigResource.java
index 5c2a1ba..842be53 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/PolicyConfigResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/PolicyConfigResource.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import javax.ws.rs.core.Response;
 
+import brooklyn.basic.BrooklynObjectInternal;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
 import brooklyn.entity.basic.EntityLocal;
@@ -59,10 +60,10 @@ public class PolicyConfigResource extends AbstractBrooklynRestResource implement
     public Map<String, Object> batchConfigRead(String application, String entityToken, String policyToken) {
         // TODO: add test
         Policy policy = brooklyn().getPolicy(application, entityToken, policyToken);
-        Map<ConfigKey<?>, Object> source = policy.getAllConfig();
+        Map<String, Object> source = ((BrooklynObjectInternal)policy).config().getBag().getAllConfig();
         Map<String, Object> result = Maps.newLinkedHashMap();
-        for (Map.Entry<ConfigKey<?>, Object> ek : source.entrySet()) {
-            result.put(ek.getKey().getName(), getStringValueForDisplay(brooklyn(), policy, ek.getValue()));
+        for (Map.Entry<String, Object> ek : source.entrySet()) {
+            result.put(ek.getKey(), getStringValueForDisplay(brooklyn(), policy, ek.getValue()));
         }
         return result;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/usage/rest-server/src/main/java/brooklyn/rest/transform/LocationTransformer.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/transform/LocationTransformer.java b/usage/rest-server/src/main/java/brooklyn/rest/transform/LocationTransformer.java
index a77e386..accb59a 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/transform/LocationTransformer.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/transform/LocationTransformer.java
@@ -57,14 +57,14 @@ public class LocationTransformer {
         if (mgmt != null && (level==LocationDetailLevel.FULL_EXCLUDING_SECRET || level==LocationDetailLevel.FULL_INCLUDING_SECRET)) {
             LocationDefinition ld = new BasicLocationDefinition(id, locationSpec.getName(), locationSpec.getSpec(), locationSpec.getConfig());
             Location ll = mgmt.getLocationRegistry().resolve(ld, false, null).orNull();
-            if (ll!=null) config = ll.getAllConfig(true);
+            if (ll!=null) config = ((LocationInternal)ll).config().getBag().getAllConfig();
         } else if (level==LocationDetailLevel.LOCAL_EXCLUDING_SECRET) {
             // get displayName
             if (!config.containsKey(LocationConfigKeys.DISPLAY_NAME.getName()) && mgmt!=null) {
                 LocationDefinition ld = new BasicLocationDefinition(id, locationSpec.getName(), locationSpec.getSpec(), locationSpec.getConfig());
                 Location ll = mgmt.getLocationRegistry().resolve(ld, false, null).orNull();
                 if (ll!=null) {
-                    Map<String, Object> configExtra = ll.getAllConfig(true);
+                    Map<String, Object> configExtra = ((LocationInternal)ll).config().getBag().getAllConfig();
                     if (configExtra.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) {
                         ConfigBag configNew = ConfigBag.newInstance(config);
                         configNew.configure(LocationConfigKeys.DISPLAY_NAME, (String)configExtra.get(LocationConfigKeys.DISPLAY_NAME.getName()));
@@ -93,13 +93,13 @@ public class LocationTransformer {
         Map<String, Object> config = l.getConfig();
         if (mgmt != null && (level==LocationDetailLevel.FULL_EXCLUDING_SECRET || level==LocationDetailLevel.FULL_INCLUDING_SECRET)) {
             Location ll = mgmt.getLocationRegistry().resolve(l, false, null).orNull();
-            if (ll!=null) config = ll.getAllConfig(true);
+            if (ll!=null) config = ((LocationInternal)ll).config().getBag().getAllConfig();
         } else if (level==LocationDetailLevel.LOCAL_EXCLUDING_SECRET) {
             // get displayName
             if (mgmt != null && !config.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) {
                 Location ll = mgmt.getLocationRegistry().resolve(l, false, null).orNull();
                 if (ll!=null) {
-                    Map<String, Object> configExtra = ll.getAllConfig(true);
+                    Map<String, Object> configExtra = ((LocationInternal)ll).config().getBag().getAllConfig();
                     if (configExtra.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) {
                         ConfigBag configNew = ConfigBag.newInstance(config);
                         configNew.configure(LocationConfigKeys.DISPLAY_NAME, (String)configExtra.get(LocationConfigKeys.DISPLAY_NAME.getName()));
@@ -137,8 +137,9 @@ public class LocationTransformer {
         while (lp!=null && (spec==null || specId==null)) {
             // walk parent locations
             // TODO not sure this is the best strategy, or if it's needed, as the spec config is inherited anyway... 
-            if (spec==null)
-                spec = Strings.toString( lp.getAllConfig(true).get(LocationInternal.ORIGINAL_SPEC.getName()) );
+            if (spec==null) {
+                spec = Strings.toString( ((LocationInternal)lp).config().getRaw(LocationInternal.ORIGINAL_SPEC) );
+            }
             if (specId==null) {
                 LocationDefinition ld = null;
                 // prefer looking it up by name as this loads the canonical definition
@@ -159,11 +160,16 @@ public class LocationTransformer {
             if (ll!=null) specId = ll.getId();
         }
         
-        Map<String, Object> configOrig = l.getAllConfig(level!=LocationDetailLevel.LOCAL_EXCLUDING_SECRET);
+        Map<String, Object> configOrig;
+        if (level == LocationDetailLevel.LOCAL_EXCLUDING_SECRET) {
+            configOrig = MutableMap.copyOf(((LocationInternal)l).config().getLocalBag().getAllConfig());
+        } else {
+            configOrig = MutableMap.copyOf(((LocationInternal)l).config().getBag().getAllConfig());
+        }
         if (level==LocationDetailLevel.LOCAL_EXCLUDING_SECRET) {
             // for LOCAL, also get the display name
             if (!configOrig.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) {
-                Map<String, Object> configExtra = l.getAllConfig(true);
+                Map<String, Object> configExtra = ((LocationInternal)l).config().getBag().getAllConfig();
                 if (configExtra.containsKey(LocationConfigKeys.DISPLAY_NAME.getName()))
                     configOrig.put(LocationConfigKeys.DISPLAY_NAME.getName(), configExtra.get(LocationConfigKeys.DISPLAY_NAME.getName()));
             }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java
index a6c26ab..21d9bac 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceTest.java
@@ -45,9 +45,9 @@ import brooklyn.entity.basic.BasicEntity;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.EntityFunctions;
 import brooklyn.entity.basic.Lifecycle;
-import brooklyn.location.Location;
 import brooklyn.location.basic.AbstractLocation;
 import brooklyn.location.basic.LocationConfigKeys;
+import brooklyn.location.basic.LocationInternal;
 import brooklyn.location.geo.HostGeoInfo;
 import brooklyn.rest.domain.ApiError;
 import brooklyn.rest.domain.ApplicationSpec;
@@ -533,8 +533,8 @@ public class ApplicationResourceTest extends BrooklynRestResourceTest {
         log.info("starting testLocatedLocations");
         testListApplications();
 
-        Location l = getManagementContext().getApplications().iterator().next().getLocations().iterator().next();
-        if (!l.hasConfig(LocationConfigKeys.LATITUDE, false)) {
+        LocationInternal l = (LocationInternal) getManagementContext().getApplications().iterator().next().getLocations().iterator().next();
+        if (l.config().getLocalRaw(LocationConfigKeys.LATITUDE).isAbsent()) {
             log.info("Supplying fake locations for localhost because could not be autodetected");
             ((AbstractLocation) l).setHostGeoInfo(new HostGeoInfo("localhost", "localhost", 50, 0));
         }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/73c49852/usage/rest-server/src/test/java/brooklyn/rest/util/EntityLocationUtilsTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/util/EntityLocationUtilsTest.java b/usage/rest-server/src/test/java/brooklyn/rest/util/EntityLocationUtilsTest.java
index 10d1a99..8a6d212 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/util/EntityLocationUtilsTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/util/EntityLocationUtilsTest.java
@@ -34,6 +34,7 @@ import brooklyn.entity.basic.SoftwareProcess;
 import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.location.Location;
 import brooklyn.location.basic.AbstractLocation;
+import brooklyn.location.basic.LocationInternal;
 import brooklyn.location.geo.HostGeoInfo;
 import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
 
@@ -63,7 +64,7 @@ public class EntityLocationUtilsTest extends BrooklynAppUnitTestSupport {
         Entities.dumpInfo(app);
 
         log.info("r2loc: "+r2.getLocations());
-        log.info("props: "+r2.getLocations().iterator().next().getAllConfig(false));
+        log.info("props: "+((LocationInternal)r2.getLocations().iterator().next()).config().getBag().getAllConfig());
 
         Map<Location, Integer> counts = new EntityLocationUtils(mgmt).countLeafEntitiesByLocatedLocations();
         log.info("count: "+counts);