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:13 UTC
[8/9] incubator-brooklyn git commit: Configurable.config():
incorporate review comments
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);
+ }
}
}