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);