entity.policies() etc returns an Iterable Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a63b8cf1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a63b8cf1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a63b8cf1
Branch: refs/heads/master Commit: a63b8cf13ed62decb136bccd20eb35df706d5046 Parents: ebe942b Author: Aled Sage <[email protected]> Authored: Wed Sep 23 11:10:04 2015 +0100 Committer: Aled Sage <[email protected]> Committed: Wed Sep 23 11:10:04 2015 +0100 ---------------------------------------------------------------------- .../org/apache/brooklyn/api/entity/Entity.java | 89 ++++++++++---------- .../brooklyn/core/entity/AbstractEntity.java | 40 ++++++--- .../brooklyn/core/entity/EntityInternal.java | 22 +++++ 3 files changed, 92 insertions(+), 59 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a63b8cf1/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java index 32f9c00..eb9f907 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java @@ -19,17 +19,16 @@ package org.apache.brooklyn.api.entity; import java.util.Collection; +import java.util.Iterator; import java.util.Map; import javax.annotation.Nullable; import org.apache.brooklyn.api.effector.Effector; import org.apache.brooklyn.api.location.Location; -import org.apache.brooklyn.api.mgmt.SubscriptionContext; -import org.apache.brooklyn.api.mgmt.SubscriptionHandle; -import org.apache.brooklyn.api.mgmt.SubscriptionManager; import org.apache.brooklyn.api.mgmt.Task; import org.apache.brooklyn.api.objs.BrooklynObject; +import org.apache.brooklyn.api.objs.EntityAdjunct; import org.apache.brooklyn.api.policy.Policy; import org.apache.brooklyn.api.policy.PolicySpec; import org.apache.brooklyn.api.sensor.AttributeSensor; @@ -38,7 +37,6 @@ import org.apache.brooklyn.api.sensor.EnricherSpec; import org.apache.brooklyn.api.sensor.Feed; import org.apache.brooklyn.api.sensor.Sensor; import org.apache.brooklyn.api.sensor.SensorEvent; -import org.apache.brooklyn.api.sensor.SensorEventListener; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.config.ConfigKey.HasConfigKey; import org.apache.brooklyn.util.guava.Maybe; @@ -362,79 +360,80 @@ public interface Entity extends BrooklynObject { <T> void emit(Sensor<T> sensor, T value); } - @Beta - public interface PolicySupport { + public interface AdjunctSupport<T extends EntityAdjunct> extends Iterable<T> { /** - * @return an immutable thread-safe view of the policies. + * @return A read-only thread-safe iterator over all the instances. */ - Collection<Policy> getPolicies(); + Iterator<T> iterator(); /** - * Adds the given policy to this entity. Also calls policy.setEntity if available. + * Adds an instance. */ - void add(Policy policy); + void add(T val); /** + * Removes an instance. + */ + boolean remove(T val); + } + + @Beta + public interface PolicySupport extends AdjunctSupport<Policy> { + /** * Adds the given policy to this entity. Also calls policy.setEntity if available. */ - <T extends Policy> T add(PolicySpec<T> enricher); + @Override + void add(Policy policy); /** * Removes the given policy from this entity. * @return True if the policy existed at this entity; false otherwise */ + @Override boolean remove(Policy policy); + + /** + * Adds the given policy to this entity. Also calls policy.setEntity if available. + */ + <T extends Policy> T add(PolicySpec<T> enricher); } @Beta - public interface EnricherSupport { - /** - * @return an immutable thread-safe view of the enrichers. - */ - Collection<Enricher> getEnrichers(); - + public interface EnricherSupport extends AdjunctSupport<Enricher> { /** * Adds the given enricher to this entity. Also calls enricher.setEntity if available. */ + @Override void add(Enricher enricher); /** - * Adds the given enricher to this entity. Also calls enricher.setEntity if available. - */ - <T extends Enricher> T add(EnricherSpec<T> enricher); - - /** * Removes the given enricher from this entity. * @return True if the policy enricher at this entity; false otherwise */ + @Override boolean remove(Enricher enricher); - } - - @Beta - public interface GroupSupport { - /** - * The {@link Collection} of {@link Group}s that this entity is a member of. - * - * Groupings can be used to allow easy management/monitoring of a group of entities. - */ - Collection<Group> getGroups(); - + /** - * Add this entity as a member of the given {@link Group}. Called by framework. - * <p> - * Users should call {@link Group#addMember(Entity)} instead; this method will then - * automatically be called. However, the reverse is not true (calling this method will - * not tell the group; this behaviour may change in a future release!) + * Adds the given enricher to this entity. Also calls enricher.setEntity if available. */ - void add(Group group); + <T extends Enricher> T add(EnricherSpec<T> enricher); + } + /** + * For managing/querying the group membership of this entity. + * + * Groupings can be used to allow easy management/monitoring of a group of entities. + * + * To add/remove this entity from a group, users should call {@link Group#addMember(Entity)} + * and {@link Group#removeMember(Entity)}. In a future release, add/remove methods may be + * added here. + */ + @Beta + public interface GroupSupport extends Iterable<Group> { /** - * Removes this entity as a member of the given {@link Group}. Called by framework. - * <p> - * Users should call {@link Group#removeMember(Entity)} instead; this method will then - * automatically be called. However, the reverse is not true (calling this method will - * not tell the group; this behaviour may change in a future release!) + * A read-only thread-safe iterator over all the {@link Group}s that this entity is a member of. */ - void remove(Group group); + @Override + Iterator<Group> iterator(); } } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a63b8cf1/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java index 08b25f2..e432717 100644 --- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java +++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java @@ -705,7 +705,16 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E */ @Beta // TODO revert to private when groups() is reverted to return GroupSupport - public class BasicGroupSupport implements GroupSupport { + public class BasicGroupSupport implements GroupSupportInternal { + @Override + public Iterator<Group> iterator() { + return asList().iterator(); + } + + protected List<Group> asList() { + return ImmutableList.copyOf(groupsInternal); + } + @Override public void add(Group group) { boolean changed = groupsInternal.add(group); @@ -725,11 +734,6 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E emit(AbstractEntity.GROUP_REMOVED, group); } } - - @Override - public Collection<Group> getGroups() { - return ImmutableList.copyOf(groupsInternal); - } } /** @@ -751,12 +755,12 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E } /** - * @deprecated since 0.9.0; see {@link #groups()} and {@link GroupSupport#getGroups()} + * @deprecated since 0.9.0; see {@link #groups()} and {@link GroupSupport#iterator()} */ @Override @Deprecated public Collection<Group> getGroups() { - return groups().getGroups(); + return groups().asList(); } @Override @@ -1607,7 +1611,11 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E public class BasicPolicySupport implements PolicySupportInternal { @Override - public Collection<Policy> getPolicies() { + public Iterator<Policy> iterator() { + return asList().iterator(); + } + + protected List<Policy> asList() { return ImmutableList.<Policy>copyOf(policiesInternal); } @@ -1666,7 +1674,11 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E // TODO revert to private when config() is reverted to return SensorSupportInternal public class BasicEnricherSupport implements EnricherSupportInternal { @Override - public Collection<Enricher> getEnrichers() { + public Iterator<Enricher> iterator() { + return asList().iterator(); + } + + protected List<Enricher> asList() { return ImmutableList.<Enricher>copyOf(enrichersInternal); } @@ -1716,12 +1728,12 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E } /** - * @deprecated since 0.9.0; see {@link BasicPolicySupport#getPolicies()}; e.g. {@code policies().getPolicies()} + * @deprecated since 0.9.0; see {@link BasicPolicySupport#iterator()}; e.g. {@code policies().iterator()} */ @Override @Deprecated public Collection<Policy> getPolicies() { - return policies().getPolicies(); + return policies().asList(); } /** @@ -1770,12 +1782,12 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E } /** - * @deprecated since 0.9.0; see {@link BasicEnricherSupport#getEnrichers()}; e.g. {@code enrichers().getEnrichers()} + * @deprecated since 0.9.0; see {@link BasicEnricherSupport#iterator()}; e.g. {@code enrichers().iterator()} */ @Override @Deprecated public Collection<Enricher> getEnrichers() { - return enrichers().getEnrichers(); + return enrichers().asList(); } /** http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a63b8cf1/core/src/main/java/org/apache/brooklyn/core/entity/EntityInternal.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/EntityInternal.java b/core/src/main/java/org/apache/brooklyn/core/entity/EntityInternal.java index c0eca7e..27b09a4 100644 --- a/core/src/main/java/org/apache/brooklyn/core/entity/EntityInternal.java +++ b/core/src/main/java/org/apache/brooklyn/core/entity/EntityInternal.java @@ -24,6 +24,7 @@ import java.util.Map; import org.apache.brooklyn.api.effector.Effector; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.EntityLocal; +import org.apache.brooklyn.api.entity.Group; import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.api.mgmt.ExecutionContext; import org.apache.brooklyn.api.mgmt.ManagementContext; @@ -244,4 +245,25 @@ public interface EntityInternal extends BrooklynObjectInternal, EntityLocal, Reb */ boolean removeAll(); } + + @Beta + public interface GroupSupportInternal extends Entity.GroupSupport { + /** + * Add this entity as a member of the given {@link Group}. Called by framework. + * <p> + * Users should call {@link Group#addMember(Entity)} instead; this method will then + * automatically be called. However, the reverse is not true (calling this method will + * not tell the group; this behaviour may change in a future release!) + */ + void add(Group group); + + /** + * Removes this entity as a member of the given {@link Group}. Called by framework. + * <p> + * Users should call {@link Group#removeMember(Entity)} instead; this method will then + * automatically be called. However, the reverse is not true (calling this method will + * not tell the group; this behaviour may change in a future release!) + */ + void remove(Group group); + } }
