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 2014/07/28 16:21:54 UTC
[3/4] git commit: Adds EntitySpec.groups and EntitySpec.members
Adds EntitySpec.groups and EntitySpec.members
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/40670229
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/40670229
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/40670229
Branch: refs/heads/master
Commit: 406702291832cc21b9cc820d5d78920933f8233d
Parents: 35f267f
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jul 21 14:48:07 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jul 21 14:48:07 2014 +0100
----------------------------------------------------------------------
.../brooklyn/entity/proxying/EntitySpec.java | 39 +++++++++++++++++++-
.../entity/proxying/InternalEntityFactory.java | 12 ++++++
.../brooklyn/entity/basic/EntitySpecTest.java | 22 +++++++++++
3 files changed, 72 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40670229/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java b/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
index 1ea5fb6..aad0d28 100644
--- a/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
+++ b/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
@@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.config.ConfigKey;
import brooklyn.config.ConfigKey.HasConfigKey;
import brooklyn.entity.Entity;
+import brooklyn.entity.Group;
import brooklyn.location.Location;
import brooklyn.management.Task;
import brooklyn.policy.Enricher;
@@ -116,7 +117,9 @@ public class EntitySpec<T extends Entity> implements Serializable {
.enricherSpecs(spec.getEnricherSpecs())
.enrichers(spec.getEnrichers())
.addInitializers(spec.getInitializers())
- .children(spec.getChildren());
+ .children(spec.getChildren())
+ .members(spec.getMembers())
+ .groups(spec.getGroups());
if (spec.getParent() != null) result.parent(spec.getParent());
if (spec.getImplementation() != null) result.impl(spec.getImplementation());
@@ -143,6 +146,8 @@ public class EntitySpec<T extends Entity> implements Serializable {
private final Set<Class<?>> additionalInterfaces = Sets.newLinkedHashSet();
private final List<EntityInitializer> entityInitializers = Lists.newArrayList();
private final List<EntitySpec<?>> children = Lists.newArrayList();
+ private final List<Entity> members = Lists.newArrayList();
+ private final List<Group> groups = Lists.newArrayList();
private volatile boolean immutable;
public EntitySpec(Class<T> type) {
@@ -198,6 +203,14 @@ public class EntitySpec<T extends Entity> implements Serializable {
return children;
}
+ public List<Entity> getMembers() {
+ return members;
+ }
+
+ public List<Group> getGroups() {
+ return groups;
+ }
+
/**
* @return The entity's parent
*/
@@ -310,6 +323,30 @@ public class EntitySpec<T extends Entity> implements Serializable {
return this;
}
+ public EntitySpec<T> members(Iterable<? extends Entity> members) {
+ checkMutable();
+ Iterables.addAll(this.members, members);
+ return this;
+ }
+
+ public EntitySpec<T> member(Entity member) {
+ checkMutable();
+ members.add(member);
+ return this;
+ }
+
+ public EntitySpec<T> groups(Iterable<? extends Group> groups) {
+ checkMutable();
+ Iterables.addAll(this.groups, groups);
+ return this;
+ }
+
+ public EntitySpec<T> group(Group group) {
+ checkMutable();
+ groups.add(group);
+ return this;
+ }
+
public EntitySpec<T> parent(Entity val) {
checkMutable();
parent = checkNotNull(val, "parent");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40670229/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
index df73423..d6a31fb 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.config.ConfigKey;
import brooklyn.entity.Entity;
+import brooklyn.entity.Group;
import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.EntityInternal;
@@ -220,6 +221,17 @@ public class InternalEntityFactory {
entity.addChild(child);
}
+ for (Entity member: spec.getMembers()) {
+ if (!(entity instanceof Group)) {
+ throw new IllegalStateException("Entity "+entity+" must be a group to add members "+spec.getMembers());
+ }
+ ((Group)entity).addMember(member);
+ }
+
+ for (Group group : spec.getGroups()) {
+ group.addMember(entity);
+ }
+
return entity;
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40670229/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java b/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
index 8550231..403441c 100644
--- a/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
@@ -35,9 +35,11 @@ import brooklyn.policy.EnricherSpec;
import brooklyn.policy.Policy;
import brooklyn.policy.PolicySpec;
import brooklyn.policy.basic.AbstractPolicy;
+import brooklyn.test.Asserts;
import brooklyn.test.entity.TestEntity;
import brooklyn.util.flags.SetFromFlag;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
public class EntitySpecTest extends BrooklynAppUnitTestSupport {
@@ -123,6 +125,26 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
assertEquals(Iterables.getOnlyElement(entity.getEnrichers()), enricher);
}
+ @Test
+ public void testAddsMembers() throws Exception {
+ entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class)
+ .member(entity));
+
+ Asserts.assertEqualsIgnoringOrder(group.getMembers(), ImmutableSet.of(entity));
+ Asserts.assertEqualsIgnoringOrder(entity.getGroups(), ImmutableSet.of(group));
+ }
+
+ @Test
+ public void testAddsGroups() throws Exception {
+ BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
+ entity = app.createAndManageChild(EntitySpec.create(TestEntity.class)
+ .group(group));
+
+ Asserts.assertEqualsIgnoringOrder(group.getMembers(), ImmutableSet.of(entity));
+ Asserts.assertEqualsIgnoringOrder(entity.getGroups(), ImmutableSet.of(group));
+ }
+
public static class MyPolicy extends AbstractPolicy {
public static final BasicConfigKey<String> CONF1 = new BasicConfigKey<String>(String.class, "testpolicy.conf1", "my descr, conf1", "defaultval1");
public static final BasicConfigKey<Integer> CONF2 = new BasicConfigKey<Integer>(Integer.class, "testpolicy.conf2", "my descr, conf2", 2);