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/07/24 07:07:22 UTC

[3/4] incubator-brooklyn git commit: Apply flags for fields declared in the entity implementation

Apply flags for fields declared in the entity implementation


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

Branch: refs/heads/master
Commit: b1a730a3d5bf49a0bb83663d268b87f78ee6b325
Parents: 68f5bd7
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Thu Jul 16 18:46:54 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Jul 16 18:48:41 2015 +0300

----------------------------------------------------------------------
 .../brooklyn/camp/spi/resolve/PdpProcessor.java | 14 +++++-
 .../BrooklynComponentTemplateResolver.java      | 20 +++++++-
 .../camp/brooklyn/EntitiesYamlTest.java         | 21 +++++++++
 .../brooklyn/catalog/CatalogYamlEntityTest.java | 49 ++++++++++++++++----
 4 files changed, 91 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a730a3/camp/camp-base/src/main/java/io/brooklyn/camp/spi/resolve/PdpProcessor.java
----------------------------------------------------------------------
diff --git a/camp/camp-base/src/main/java/io/brooklyn/camp/spi/resolve/PdpProcessor.java b/camp/camp-base/src/main/java/io/brooklyn/camp/spi/resolve/PdpProcessor.java
index 44ea105..e4bc537 100644
--- a/camp/camp-base/src/main/java/io/brooklyn/camp/spi/resolve/PdpProcessor.java
+++ b/camp/camp-base/src/main/java/io/brooklyn/camp/spi/resolve/PdpProcessor.java
@@ -39,6 +39,7 @@ import org.apache.commons.compress.archivers.ArchiveInputStream;
 import org.apache.commons.compress.archivers.ArchiveStreamFactory;
 import org.yaml.snakeyaml.error.YAMLException;
 
+import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.stream.Streams;
 import brooklyn.util.yaml.Yamls;
@@ -104,8 +105,17 @@ public class PdpProcessor {
         }
 
         Map<String, Object> attrs = plan.getCustomAttributes();
-        if (attrs!=null && !attrs.isEmpty())
-            atc.addCustomAttributes(attrs);
+        if (attrs!=null && !attrs.isEmpty()) {
+            Map<String, Object> customAttrs = attrs;
+            if (customAttrs.containsKey("id")) {
+                // id shouldn't be leaking to entities, see InternalEntityFactory.createEntityAndDescendantsUninitialized.
+                // If set it will go through to the spec because AbstractBrooklynObject has @SetFromFlag("id") on the id property.
+                // Follows logic in BrooklynEntityMatcher.apply(...).
+                customAttrs = MutableMap.copyOf(attrs);
+                customAttrs.put("planId", customAttrs.remove("id"));
+            }
+            atc.addCustomAttributes(customAttrs);
+        }
         
         if (atc.getInstantiator()==null)
             // set a default instantiator which just invokes the component's instantiators

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a730a3/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index ca4748f..cdf1beb 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -27,6 +27,7 @@ import io.brooklyn.camp.spi.ApplicationComponentTemplate;
 import io.brooklyn.camp.spi.AssemblyTemplate;
 import io.brooklyn.camp.spi.PlatformComponentTemplate;
 
+import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -359,7 +360,7 @@ public class BrooklynComponentTemplateResolver {
             bagFlags.putAll((Map<String, Object>) attrs.getStringKey(BrooklynCampReservedKeys.BROOKLYN_FLAGS));
         }
 
-        List<FlagConfigKeyAndValueRecord> topLevelApparentConfig = FlagUtils.findAllFlagsAndConfigKeys(null, spec.getType(), bagFlags);
+        Collection<FlagConfigKeyAndValueRecord> topLevelApparentConfig = findAllFlagsAndConfigKeys(spec, bagFlags);
         for (FlagConfigKeyAndValueRecord r: topLevelApparentConfig) {
             if (r.getConfigKeyMaybeValue().isPresent())
                 bag.putIfAbsent((ConfigKey)r.getConfigKey(), r.getConfigKeyMaybeValue().get());
@@ -368,7 +369,7 @@ public class BrooklynComponentTemplateResolver {
         }
 
         // now set configuration for all the items in the bag
-        List<FlagConfigKeyAndValueRecord> records = FlagUtils.findAllFlagsAndConfigKeys(null, spec.getType(), bag);
+        Collection<FlagConfigKeyAndValueRecord> records = findAllFlagsAndConfigKeys(spec, bag);
         Set<String> keyNamesUsed = new LinkedHashSet<String>();
         for (FlagConfigKeyAndValueRecord r: records) {
             if (r.getFlagMaybeValue().isPresent()) {
@@ -396,6 +397,21 @@ public class BrooklynComponentTemplateResolver {
         }
     }
 
+    /**
+     * Searches for config keys in the type, additional interfaces and the implementation (if specified)
+     */
+    private Collection<FlagConfigKeyAndValueRecord> findAllFlagsAndConfigKeys(EntitySpec<?> spec, ConfigBag bagFlags) {
+        Set<FlagConfigKeyAndValueRecord> allKeys = MutableSet.of();
+        allKeys.addAll(FlagUtils.findAllFlagsAndConfigKeys(null, spec.getType(), bagFlags));
+        if (spec.getImplementation() != null) {
+            allKeys.addAll(FlagUtils.findAllFlagsAndConfigKeys(null, spec.getImplementation(), bagFlags));
+        }
+        for (Class<?> iface : spec.getAdditionalInterfaces()) {
+            allKeys.addAll(FlagUtils.findAllFlagsAndConfigKeys(null, iface, bagFlags));
+        }
+        return allKeys;
+    }
+
     protected static class SpecialFlagsTransformer implements Function<Object, Object> {
         protected final ManagementContext mgmt;
         /* TODO find a way to make do without loader here?

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a730a3/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/EntitiesYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/EntitiesYamlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/EntitiesYamlTest.java
index 9885686..ec0d6bd 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/EntitiesYamlTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/EntitiesYamlTest.java
@@ -156,6 +156,16 @@ public class EntitiesYamlTest extends AbstractYamlTest {
     }
 
     @Test
+    public void testFlagAtRootEntityImpl() throws Exception {
+        Entity app = createAndStartApplication(
+                "services:",
+                "- serviceType: " + TestEntityImpl.class.getName(),
+                "  confName: Foo Bar");
+        Entity testEntity = Iterables.getOnlyElement(app.getChildren());
+        Assert.assertEquals(testEntity.getConfig(TestEntity.CONF_NAME), "Foo Bar");
+    }
+
+    @Test
     public void testConfigKeyAtRoot() throws Exception {
         Entity testEntity = setupAndCheckTestEntityInBasicYamlWith( 
             "  test.confName: Foo Bar");
@@ -180,6 +190,17 @@ public class EntitiesYamlTest extends AbstractYamlTest {
     }
 
     @Test
+    public void testExplicitFlagsEntityImpl() throws Exception {
+        Entity app = createAndStartApplication(
+                "services:",
+                "- serviceType: " + TestEntityImpl.class.getName(),
+                "  brooklyn.flags:",
+                "    confName: Foo Bar");
+        Entity testEntity = Iterables.getOnlyElement(app.getChildren());
+        Assert.assertEquals(testEntity.getConfig(TestEntity.CONF_NAME), "Foo Bar");
+    }
+
+    @Test
     public void testUndeclaredExplicitFlagsIgnored() throws Exception {
         Entity testEntity = setupAndCheckTestEntityInBasicYamlWith( 
             "  brooklyn.flags:",

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a730a3/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
index fecbe43..1639588 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
@@ -39,6 +39,7 @@ import brooklyn.management.osgi.OsgiStandaloneTest;
 import brooklyn.management.osgi.OsgiTestResources;
 import brooklyn.test.TestResourceUnavailableException;
 import brooklyn.test.entity.TestEntity;
+import brooklyn.test.entity.TestEntityImpl;
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.exceptions.Exceptions;
@@ -613,7 +614,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
 
     @Test
     public void testConfigAppliedToCatalogItem() throws Exception {
-        addTestEntityCatalogItem();
+        addCatalogOSGiEntity("test", TestEntity.class.getName());
         String testName = "test-applies-config-on-catalog-item";
         Entity app = createAndStartApplication(
                 "services:",
@@ -626,7 +627,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
 
     @Test
     public void testFlagsAppliesToCatalogItem() throws Exception {
-        addTestEntityCatalogItem();
+        addCatalogOSGiEntity("test", TestEntity.class.getName());
         String testName = "test-applies-config-on-catalog-item";
         Entity app = createAndStartApplication(
                 "services:",
@@ -638,7 +639,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
 
     @Test
     public void testExplicitFlagsAppliesToCatalogItem() throws Exception {
-        addTestEntityCatalogItem();
+        addCatalogOSGiEntity("test", TestEntity.class.getName());
         String testName = "test-applies-config-on-catalog-item";
         Entity app = createAndStartApplication(
                 "services:",
@@ -649,15 +650,45 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
         assertEquals(testEntity.config().get(TestEntity.CONF_NAME), testName);
     }
     
-    private void addTestEntityCatalogItem() {
-        addCatalogItems(
-                "brooklyn.catalog:",
-                "   id: test",
-                "   version: " + TEST_VERSION,
+
+    @Test
+    public void testConfigAppliedToCatalogItemImpl() throws Exception {
+        addCatalogOSGiEntity("test", TestEntityImpl.class.getName());
+        String testName = "test-applies-config-on-catalog-item";
+        Entity app = createAndStartApplication(
+                "services:",
+                "- type: " + ver("test"),
+                "  brooklyn.config:",
+                "    test.confName: " + testName);
+        Entity testEntity = Iterables.getOnlyElement(app.getChildren());
+        assertEquals(testEntity.config().get(TestEntity.CONF_NAME), testName);
+    }
+
+    @Test
+    public void testFlagsAppliesToCatalogItemImpl() throws Exception {
+        addCatalogOSGiEntity("test", TestEntityImpl.class.getName());
+        String testName = "test-applies-config-on-catalog-item";
+        Entity app = createAndStartApplication(
                 "services:",
-                "- type: " + TestEntity.class.getName());
+                "- type: " + ver("test"),
+                "  confName: " + testName);
+        Entity testEntity = Iterables.getOnlyElement(app.getChildren());
+        assertEquals(testEntity.config().get(TestEntity.CONF_NAME), testName);
     }
 
+    @Test
+    public void testExplicitFlagsAppliesToCatalogItemImpl() throws Exception {
+        addCatalogOSGiEntity("test", TestEntityImpl.class.getName());
+        String testName = "test-applies-config-on-catalog-item";
+        Entity app = createAndStartApplication(
+                "services:",
+                "- type: " + ver("test"),
+                "  brooklyn.flags:",
+                "    confName: " + testName);
+        Entity testEntity = Iterables.getOnlyElement(app.getChildren());
+        assertEquals(testEntity.config().get(TestEntity.CONF_NAME), testName);
+    }
+    
     private void registerAndLaunchAndAssertSimpleEntity(String symbolicName, String serviceType) throws Exception {
         addCatalogOSGiEntity(symbolicName, serviceType);
         String yaml = "name: simple-app-yaml\n" +