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" +