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 2016/11/07 11:41:36 UTC

[2/3] brooklyn-server git commit: Fix DSL config() to use parameter defaults

Fix DSL config() to use parameter defaults

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

Branch: refs/heads/master
Commit: ba62cad9fb3f02256d4c7d40efbd3d31a86b30bc
Parents: ae651a6
Author: Aled Sage <al...@gmail.com>
Authored: Mon Nov 7 10:09:13 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Nov 7 10:09:13 2016 +0000

----------------------------------------------------------------------
 .../brooklyn/spi/dsl/methods/DslComponent.java  | 10 +++++---
 .../brooklyn/camp/brooklyn/dsl/DslTest.java     | 24 +++++++++++++++++++-
 .../AbstractConfigurationSupportInternal.java   |  3 +++
 .../org/apache/brooklyn/util/guava/Maybe.java   |  9 ++++++++
 4 files changed, 42 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/ba62cad9/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java
index 720dfae..5e42fbe 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/methods/DslComponent.java
@@ -29,6 +29,7 @@ import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.api.sensor.Sensor;
 import org.apache.brooklyn.camp.brooklyn.BrooklynCampConstants;
 import org.apache.brooklyn.camp.brooklyn.spi.dsl.BrooklynDslDeferredSupplier;
+import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.entity.EntityInternal;
@@ -361,8 +362,10 @@ public class DslComponent extends BrooklynDslDeferredSupplier<Entity> {
             Maybe<Entity> targetEntityMaybe = component.getImmediately();
             if (targetEntityMaybe.isAbsent()) return Maybe.absent("Target entity not available");
             EntityInternal targetEntity = (EntityInternal) targetEntityMaybe.get();
-            
-            return targetEntity.config().getNonBlocking(ConfigKeys.newConfigKey(Object.class, keyName));
+
+            ConfigKey<?> key = targetEntity.getEntityType().getConfigKey(keyName);
+            Maybe<? extends Object> result = targetEntity.config().getNonBlocking(key != null ? key : ConfigKeys.newConfigKey(Object.class, keyName));
+            return Maybe.<Object>cast(result);
         }
 
         @Override
@@ -376,7 +379,8 @@ public class DslComponent extends BrooklynDslDeferredSupplier<Entity> {
                         @Override
                         public Object call() throws Exception {
                             Entity targetEntity = component.get();
-                            return targetEntity.getConfig(ConfigKeys.newConfigKey(Object.class, keyName));
+                            ConfigKey<?> key = targetEntity.getEntityType().getConfigKey(keyName);
+                            return targetEntity.getConfig(key != null ? key : ConfigKeys.newConfigKey(Object.class, keyName));
                         }})
                     .build();
         }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/ba62cad9/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/dsl/DslTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/dsl/DslTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/dsl/DslTest.java
index 69a0aee..b4ff405 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/dsl/DslTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/dsl/DslTest.java
@@ -35,6 +35,7 @@ import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.BrooklynDslCommon;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.objs.BasicSpecParameter;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.core.test.entity.TestApplication;
 import org.apache.brooklyn.core.test.entity.TestEntity;
@@ -52,6 +53,7 @@ import org.testng.annotations.Test;
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
 import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
 import com.google.common.util.concurrent.ListenableScheduledFuture;
 import com.google.common.util.concurrent.ListeningScheduledExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
@@ -177,6 +179,21 @@ public class DslTest extends BrooklynAppUnitTestSupport {
     }
     
     @Test
+    public void testConfigUsesParameterDefaultValue() throws Exception {
+        final ConfigKey<String> configKey = ConfigKeys.newStringConfigKey("testConfig");
+        ConfigKey<String> configParam = ConfigKeys.newStringConfigKey("testParam", "myDescription", "myDefaultConfigValue");
+        BrooklynDslDeferredSupplier<?> dsl = BrooklynDslCommon.config(configKey.getName());
+        Supplier<ConfigValuePair> valueSupplier = new Supplier<ConfigValuePair>() {
+            @Override public ConfigValuePair get() {
+                return new ConfigValuePair(BrooklynDslCommon.config("testParam"), "myDefaultConfigValue");
+            }
+        };
+        new ConfigTestWorker(app, configKey, valueSupplier, dsl)
+                .childSpec(EntitySpec.create(TestEntity.class).parameters(ImmutableList.of(new BasicSpecParameter<String>("myLabel", true, configParam))))
+                .run();
+    }
+    
+    @Test
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public void testConfigImmediatelyDoesNotBlock() throws Exception {
         ConfigKey<String> configKey = ConfigKeys.newStringConfigKey("testConfig");
@@ -236,7 +253,7 @@ public class DslTest extends BrooklynAppUnitTestSupport {
         protected final TestApplication parent;
         protected final BrooklynDslDeferredSupplier<?> dsl;
         protected final Class<?> type;
-        protected EntitySpec<TestEntity> childSpec = EntitySpec.create(TestEntity.class);
+        protected EntitySpec<? extends TestEntity> childSpec = EntitySpec.create(TestEntity.class);
         protected int resolverIterations = MANY_RESOLVER_ITERATIONS;
         protected boolean satisfiedAsynchronously = false;
         private boolean wrapInTaskForImmediately = true;
@@ -247,6 +264,11 @@ public class DslTest extends BrooklynAppUnitTestSupport {
             this.type = checkNotNull(type, "type");
         }
 
+        public DslTestWorker childSpec(EntitySpec<? extends TestEntity> val) {
+            childSpec = val;
+            return this;
+        }
+        
         public DslTestWorker resolverIterations(int val) {
             resolverIterations = val;
             return this;

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/ba62cad9/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java
index 3465ecf..57730b6 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java
@@ -131,6 +131,9 @@ public abstract class AbstractConfigurationSupportInternal implements BrooklynOb
      * See {@link #getNonBlockingResolvingStructuredKey(ConfigKey)}.
      */
     protected <T> Maybe<T> getNonBlockingResolvingSimple(ConfigKey<T> key) {
+        // TODO See AbstractConfigMapImpl.getConfigImpl, for how it looks up the "container" of the
+        // key, so that it gets the right context entity etc.
+        
         // getRaw returns Maybe(val) if the key was explicitly set (where val can be null)
         // or Absent if the config key was unset.
         Object unresolved = getRaw(key).or(key.getDefaultValue());

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/ba62cad9/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java b/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java
index 37aa7c9..5270595 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java
@@ -135,6 +135,15 @@ public abstract class Maybe<T> implements Serializable, Supplier<T> {
         return ofAllowingNull(value);
     }
     
+    /**
+     * Casts the given value to the desired type. This is valid because {@link Maybe} is immutable,
+     * so things like {@code Maybe<Object>} is a super-type of {@code Maybe<String>}.
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> Maybe<T> cast(Maybe<? extends T> value) {
+        return (Maybe<T>) value;
+    }
+    
     /** Converts the given {@link Maybe} to {@link Optional}, failing if this {@link Maybe} contains null. */
     public Optional<T> toOptional() {
         if (isPresent()) return Optional.of(get());