Repository: brooklyn-server
Updated Branches:
  refs/heads/master e25832b26 -> 9ebc32c10


DynamicFabric: add support for firstMemberSpec

Just like DynamicCluster does.

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

Branch: refs/heads/master
Commit: cd29cdfb94f6e058ca9dd19b3636d03a8db52740
Parents: d7b8b0c
Author: Richard Downer <[email protected]>
Authored: Wed Jun 7 11:13:17 2017 +0100
Committer: Richard Downer <[email protected]>
Committed: Wed Jun 7 11:13:17 2017 +0100

----------------------------------------------------------------------
 .../apache/brooklyn/entity/group/DynamicFabric.java    |  4 ++++
 .../brooklyn/entity/group/DynamicFabricImpl.java       | 13 +++++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cd29cdfb/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabric.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabric.java 
b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabric.java
index 07fea0a..2f50511 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabric.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabric.java
@@ -54,6 +54,10 @@ public interface DynamicFabric extends AbstractGroup, 
Startable, Fabric {
     ConfigKey<EntitySpec<?>> MEMBER_SPEC = ConfigKeys.newConfigKey(
             new TypeToken<EntitySpec<?>>() {}, "dynamiccfabric.memberspec", 
"entity spec for creating new cluster members", null);
 
+    @SetFromFlag("firstMemberSpec")
+    ConfigKey<EntitySpec<?>> FIRST_MEMBER_SPEC = ConfigKeys.newConfigKey(
+            new TypeToken<EntitySpec<?>>() {}, 
"dynamiccfabric.firstmemberspec", "entity spec for creating new cluster 
members", null);
+
     @SetFromFlag("displayNamePrefix")
     ConfigKey<String> DISPLAY_NAME_PREFIX = ConfigKeys.newStringConfigKey(
             "dynamicfabric.displayNamePrefix", "Display name prefix, for 
created children");

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cd29cdfb/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java 
b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java
index 75ca4dc..ec03987 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/DynamicFabricImpl.java
@@ -78,6 +78,10 @@ public class DynamicFabricImpl extends AbstractGroupImpl 
implements DynamicFabri
         sensors().set(SERVICE_UP, false);
     }
     
+    protected EntitySpec<?> getFirstMemberSpec() {
+        return getConfig(FIRST_MEMBER_SPEC);
+    }
+
     protected EntitySpec<?> getMemberSpec() {
         return getConfig(MEMBER_SPEC);
     }
@@ -272,10 +276,15 @@ public class DynamicFabricImpl extends AbstractGroupImpl 
implements DynamicFabri
     }
     
     protected Entity createCluster(Location location, Map flags) {
-        EntitySpec<?> memberSpec = getMemberSpec();
+        EntitySpec<?> memberSpec = null;
+        if (getMembers().isEmpty()) memberSpec = getFirstMemberSpec();
+        if (memberSpec == null) memberSpec = getMemberSpec();
+
         if (memberSpec == null) {
             throw new IllegalStateException("No member spec nor entity factory 
supplied for dynamic fabric "+this);
         }
-        return addChild(EntitySpec.create(memberSpec).configure(flags));
+        EntitySpec<?> specConfigured = 
EntitySpec.create(memberSpec).configure(flags);
+        if (location!=null) specConfigured.location(location);
+        return addChild(specConfigured);
     }
 }

Reply via email to