You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2015/10/27 15:48:27 UTC
[5/8] incubator-brooklyn git commit: remove generics on
BrooklynObject internal hierarchy
remove generics on BrooklynObject internal hierarchy
simplifies things a lot without much work needed to cast or add correct-generic-type methods so that API is natural.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/890c5c04
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/890c5c04
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/890c5c04
Branch: refs/heads/master
Commit: 890c5c046d22612969ccb8876a070a4b15ccb316
Parents: ed113a3
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Oct 27 12:33:47 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Oct 27 12:33:47 2015 +0000
----------------------------------------------------------------------
.../org/apache/brooklyn/api/entity/Entity.java | 1 +
.../apache/brooklyn/api/location/Location.java | 4 ++++
.../org/apache/brooklyn/api/policy/Policy.java | 4 ++++
.../apache/brooklyn/api/sensor/Enricher.java | 3 +++
.../org/apache/brooklyn/api/sensor/Feed.java | 4 ++++
.../core/catalog/internal/CatalogItemDo.java | 2 +-
.../internal/CatalogItemDtoAbstract.java | 2 +-
.../core/enricher/AbstractEnricher.java | 8 +++++++-
.../brooklyn/core/entity/AbstractEntity.java | 8 +++++++-
.../brooklyn/core/entity/EntityInternal.java | 5 ++++-
.../brooklyn/core/entity/EntityRelations.java | 14 +++++++------
.../apache/brooklyn/core/feed/AbstractFeed.java | 8 +++++++-
.../core/location/AbstractLocation.java | 8 +++++++-
.../access/PortForwardManagerClient.java | 2 +-
.../location/internal/LocationInternal.java | 5 ++++-
.../AbstractBrooklynObjectRebindSupport.java | 4 ++--
.../core/objs/AbstractBrooklynObject.java | 21 +++++++-------------
.../core/objs/AbstractEntityAdjunct.java | 8 ++++----
.../brooklyn/core/objs/BrooklynDynamicType.java | 4 ++--
.../core/objs/BrooklynObjectInternal.java | 4 ++--
.../brooklyn/core/policy/AbstractPolicy.java | 8 +++++++-
.../relations/AbstractBasicRelationSupport.java | 8 ++++++++
22 files changed, 95 insertions(+), 40 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/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 3b333e0..3bca701 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
@@ -308,6 +308,7 @@ public interface Entity extends BrooklynObject {
GroupSupport groups();
+ @Override
RelationSupport<Entity> relations();
@Beta
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/api/src/main/java/org/apache/brooklyn/api/location/Location.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/location/Location.java b/api/src/main/java/org/apache/brooklyn/api/location/Location.java
index 84e371b..3ef9251 100644
--- a/api/src/main/java/org/apache/brooklyn/api/location/Location.java
+++ b/api/src/main/java/org/apache/brooklyn/api/location/Location.java
@@ -131,4 +131,8 @@ public interface Location extends Serializable, BrooklynObject {
* @throws NullPointerException if extensionType is null
*/
<T> T getExtension(Class<T> extensionType);
+
+ @Override
+ RelationSupport<Location> relations();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java b/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java
index 0235bac..5b1e2fa 100644
--- a/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java
+++ b/api/src/main/java/org/apache/brooklyn/api/policy/Policy.java
@@ -73,4 +73,8 @@ public interface Policy extends EntityAdjunct, Rebindable, Configurable {
@Override
@Beta
RebindSupport<PolicyMemento> getRebindSupport();
+
+ @Override
+ RelationSupport<Policy> relations();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/api/src/main/java/org/apache/brooklyn/api/sensor/Enricher.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/sensor/Enricher.java b/api/src/main/java/org/apache/brooklyn/api/sensor/Enricher.java
index 7d34e6c..3fde2a5 100644
--- a/api/src/main/java/org/apache/brooklyn/api/sensor/Enricher.java
+++ b/api/src/main/java/org/apache/brooklyn/api/sensor/Enricher.java
@@ -55,4 +55,7 @@ public interface Enricher extends EntityAdjunct, Rebindable, Configurable {
@Beta
RebindSupport<EnricherMemento> getRebindSupport();
+ @Override
+ RelationSupport<Enricher> relations();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/api/src/main/java/org/apache/brooklyn/api/sensor/Feed.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/sensor/Feed.java b/api/src/main/java/org/apache/brooklyn/api/sensor/Feed.java
index b07b5e3..d50e092 100644
--- a/api/src/main/java/org/apache/brooklyn/api/sensor/Feed.java
+++ b/api/src/main/java/org/apache/brooklyn/api/sensor/Feed.java
@@ -67,4 +67,8 @@ public interface Feed extends EntityAdjunct, Rebindable {
@Override
@Beta
RebindSupport<FeedMemento> getRebindSupport();
+
+ @Override
+ RelationSupport<Feed> relations();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java
index a3ae36e..fedc37e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java
@@ -33,7 +33,7 @@ import org.apache.brooklyn.core.relations.EmptyRelationSupport;
import com.google.common.base.Preconditions;
-public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT>, BrooklynObjectInternal<CatalogItem<T,SpecT>,CatalogItemDo<T,SpecT>> {
+public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT>, BrooklynObjectInternal {
protected final CatalogDo catalog;
protected final CatalogItemDtoAbstract<T,SpecT> itemDto;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
index 078cd27..47ce81d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
@@ -44,7 +44,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
-public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynObject<CatalogItem<T, SpecT>, CatalogItemDtoAbstract<T, SpecT>> implements CatalogItem<T, SpecT> {
+public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynObject implements CatalogItem<T, SpecT> {
private static Logger LOG = LoggerFactory.getLogger(CatalogItemDtoAbstract.class);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java b/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java
index 2597baa..5471c78 100644
--- a/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/core/enricher/AbstractEnricher.java
@@ -43,7 +43,7 @@ import com.google.common.collect.Maps;
/**
* Base {@link Enricher} implementation; all enrichers should extend this or its children
*/
-public abstract class AbstractEnricher extends AbstractEntityAdjunct<Enricher,AbstractEnricher> implements Enricher {
+public abstract class AbstractEnricher extends AbstractEntityAdjunct implements Enricher {
public static final ConfigKey<Boolean> SUPPRESS_DUPLICATES = ConfigKeys.newBooleanConfigKey("enricher.suppressDuplicates",
"Whether duplicate values published by this enricher should be suppressed");
@@ -70,6 +70,12 @@ public abstract class AbstractEnricher extends AbstractEntityAdjunct<Enricher,Ab
return new BasicEnricherRebindSupport(this);
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public RelationSupportInternal<Enricher> relations() {
+ return (RelationSupportInternal<Enricher>) super.relations();
+ }
+
@Override
public EnricherType getEnricherType() {
return enricherType.getSnapshot();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/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 5b52321..c75c908 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
@@ -141,7 +141,7 @@ import com.google.common.collect.Sets;
* The legacy (pre 0.5) mechanism for creating entities is for others to call the constructor directly.
* This is now deprecated.
*/
-public abstract class AbstractEntity extends AbstractBrooklynObject<Entity,EntityInternal> implements EntityLocal, EntityInternal {
+public abstract class AbstractEntity extends AbstractBrooklynObject implements EntityLocal, EntityInternal {
private static final Logger LOG = LoggerFactory.getLogger(AbstractEntity.class);
@@ -2082,5 +2082,11 @@ public abstract class AbstractEntity extends AbstractBrooklynObject<Entity,Entit
super.onTagsChanged();
getManagementSupport().getEntityChangeListener().onTagsChanged();
}
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public RelationSupportInternal<Entity> relations() {
+ return (RelationSupportInternal<Entity>) super.relations();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/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 af81c21..4056eca 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
@@ -46,7 +46,7 @@ import com.google.common.annotations.Beta;
* for the brooklyn framework only).
*/
@Beta
-public interface EntityInternal extends BrooklynObjectInternal<Entity,EntityInternal>, EntityLocal, Rebindable {
+public interface EntityInternal extends BrooklynObjectInternal, EntityLocal, Rebindable {
void addLocations(Collection<? extends Location> locations);
@@ -175,6 +175,9 @@ public interface EntityInternal extends BrooklynObjectInternal<Entity,EntityInte
@Beta
RebindSupport<EntityMemento> getRebindSupport();
+ @Override
+ RelationSupportInternal<Entity> relations();
+
/**
* Can be called to request that the entity be persisted.
* This persistence may happen asynchronously, or may not happen at all if persistence is disabled.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java b/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java
index 7dfa93e..4621a76 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/EntityRelations.java
@@ -137,24 +137,26 @@ public class EntityRelations<T extends BrooklynObject> {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static <T extends BrooklynObject> Set<Relationship<? super T,? extends BrooklynObject>> getRelationships(T source) {
- return ((BrooklynObjectInternal)source).relations().getLocalBackingStore().getRelationships();
+ return (Set) ((BrooklynObjectInternal)source).relations().getLocalBackingStore().getRelationships();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static <T extends BrooklynObject,U extends BrooklynObject> Set<U> getRelations(Relationship<? super T,U> relationship, T source) {
- return ((BrooklynObjectInternal)source).relations().getLocalBackingStore().getRelations(relationship);
+ return (Set) ((BrooklynObjectInternal)source).relations().getLocalBackingStore().getRelations((Relationship)relationship);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static <T extends BrooklynObject,U extends BrooklynObject> void add(T source, Relationship<? super T,? super U> relationship, U target) {
- ((BrooklynObjectInternal)source).relations().getLocalBackingStore().add(relationship, target);
- ((BrooklynObjectInternal)target).relations().getLocalBackingStore().add(relationship.getInverseRelationship(), source);
+ ((BrooklynObjectInternal)source).relations().getLocalBackingStore().add((Relationship)relationship, target);
+ if (relationship.getInverseRelationship()!=null)
+ ((BrooklynObjectInternal)target).relations().getLocalBackingStore().add((Relationship)relationship.getInverseRelationship(), source);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static <T extends BrooklynObject,U extends BrooklynObject> void remove(T source, Relationship<? super T,? super U> relationship, U target) {
- ((BrooklynObjectInternal)source).relations().getLocalBackingStore().remove(relationship, target);
- ((BrooklynObjectInternal)target).relations().getLocalBackingStore().remove(relationship.getInverseRelationship(), source);
+ ((BrooklynObjectInternal)source).relations().getLocalBackingStore().remove((Relationship)relationship, target);
+ if (relationship.getInverseRelationship()!=null)
+ ((BrooklynObjectInternal)target).relations().getLocalBackingStore().remove((Relationship)relationship.getInverseRelationship(), source);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/feed/AbstractFeed.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/feed/AbstractFeed.java b/core/src/main/java/org/apache/brooklyn/core/feed/AbstractFeed.java
index 64320cd..5b057dd 100644
--- a/core/src/main/java/org/apache/brooklyn/core/feed/AbstractFeed.java
+++ b/core/src/main/java/org/apache/brooklyn/core/feed/AbstractFeed.java
@@ -42,7 +42,7 @@ import org.slf4j.LoggerFactory;
* These generally poll or subscribe to get sensor values for an entity.
* They make it easy to poll over http, jmx, etc.
*/
-public abstract class AbstractFeed extends AbstractEntityAdjunct<Feed,AbstractFeed> implements Feed {
+public abstract class AbstractFeed extends AbstractEntityAdjunct implements Feed {
private static final Logger log = LoggerFactory.getLogger(AbstractFeed.class);
@@ -208,6 +208,12 @@ public abstract class AbstractFeed extends AbstractEntityAdjunct<Feed,AbstractFe
return new BasicFeedRebindSupport(this);
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public RelationSupportInternal<Feed> relations() {
+ return (RelationSupportInternal<Feed>) super.relations();
+ }
+
@Override
protected void onChanged() {
// TODO Auto-generated method stub
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java b/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
index 996b1a0..c14472d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
@@ -94,7 +94,7 @@ import com.google.common.reflect.TypeToken;
*
* Override {@link #configure(Map)} to add special initialization logic.
*/
-public abstract class AbstractLocation extends AbstractBrooklynObject<Location,LocationInternal> implements LocationInternal, HasHostGeoInfo, Configurable {
+public abstract class AbstractLocation extends AbstractBrooklynObject implements LocationInternal, HasHostGeoInfo, Configurable {
private static final long serialVersionUID = -7495805474138619830L;
@@ -755,6 +755,12 @@ public abstract class AbstractLocation extends AbstractBrooklynObject<Location,L
return new BasicLocationRebindSupport(this);
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public RelationSupportInternal<Location> relations() {
+ return (RelationSupportInternal<Location>) super.relations();
+ }
+
@Override
public boolean hasExtension(Class<?> extensionType) {
return extensions.get().containsKey(checkNotNull(extensionType, "extensionType"));
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java b/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java
index d312f53..f2b9662 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/access/PortForwardManagerClient.java
@@ -394,7 +394,7 @@ public class PortForwardManagerClient implements PortForwardManager {
}
@Override
- public RelationSupport<?> relations() {
+ public RelationSupport<Location> relations() {
return getDelegate().relations();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationInternal.java b/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationInternal.java
index fe9f669..5c83f2d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationInternal.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationInternal.java
@@ -35,7 +35,7 @@ import com.google.common.annotations.Beta;
/**
* Information about locations private to Brooklyn.
*/
-public interface LocationInternal extends BrooklynObjectInternal<Location,LocationInternal>, Location {
+public interface LocationInternal extends BrooklynObjectInternal, Location {
@Beta
public static final ConfigKey<String> ORIGINAL_SPEC = ConfigKeys.newStringConfigKey("spec.original", "The original spec used to instantiate a location");
@@ -89,5 +89,8 @@ public interface LocationInternal extends BrooklynObjectInternal<Location,Locati
@Beta
RebindSupport<LocationMemento> getRebindSupport();
+ @Override
+ RelationSupportInternal<Location> relations();
+
ManagementContext getManagementContext();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java
index 414cdbe..b56d8c6 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java
@@ -40,9 +40,9 @@ public abstract class AbstractBrooklynObjectRebindSupport<T extends Memento> imp
private static final Logger LOG = LoggerFactory.getLogger(AbstractBrooklynObjectRebindSupport.class);
- private final AbstractBrooklynObject<?,?> instance;
+ private final AbstractBrooklynObject instance;
- public AbstractBrooklynObjectRebindSupport(AbstractBrooklynObject<?,?> instance) {
+ public AbstractBrooklynObjectRebindSupport(AbstractBrooklynObject instance) {
this.instance = instance;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java
index a0e02c5..d6ed647 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java
@@ -24,7 +24,6 @@ import java.util.Set;
import org.apache.brooklyn.api.internal.ApiObjectsFactory;
import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.core.entity.AbstractEntity;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
import org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl;
@@ -41,7 +40,7 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-public abstract class AbstractBrooklynObject<PublicSelfType extends BrooklynObject,InternalSelfType extends BrooklynObjectInternal<PublicSelfType,InternalSelfType>> implements BrooklynObjectInternal<PublicSelfType,InternalSelfType> {
+public abstract class AbstractBrooklynObject implements BrooklynObjectInternal {
private static final Logger log = LoggerFactory.getLogger(AbstractBrooklynObject.class);
@@ -57,18 +56,11 @@ public abstract class AbstractBrooklynObject<PublicSelfType extends BrooklynObje
@SetFromFlag(value = "tags")
private final Set<Object> tags = Sets.newLinkedHashSet();
- private RelationSupportInternal<PublicSelfType> relations = new ByObjectBasicRelationSupport<PublicSelfType>(getPublicThis(), new RelationChangedCallback());
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private RelationSupportInternal relations = new ByObjectBasicRelationSupport(this, new RelationChangedCallback());
private volatile ManagementContext managementContext;
- @SuppressWarnings("unchecked")
- /** returns this cast to T, e.g. EntityInternal */
- protected InternalSelfType getThis() { return (InternalSelfType)this; }
-
- /** returns this cast to PublicT, e.g. Entity */
- @SuppressWarnings("unchecked")
- protected PublicSelfType getPublicThis() { return (PublicSelfType)this; }
-
public abstract void setDisplayName(String newName);
public AbstractBrooklynObject() {
@@ -98,7 +90,7 @@ public abstract class AbstractBrooklynObject<PublicSelfType extends BrooklynObje
* @deprecated since 0.7.0; only used for legacy brooklyn types where constructor is called directly
*/
@Deprecated
- protected InternalSelfType configure() {
+ protected BrooklynObjectInternal configure() {
return configure(Collections.emptyMap());
}
@@ -117,7 +109,7 @@ public abstract class AbstractBrooklynObject<PublicSelfType extends BrooklynObje
* @deprecated since 0.7.0; only used for legacy brooklyn types where constructor is called directly
*/
@Deprecated
- protected abstract InternalSelfType configure(Map<?, ?> flags);
+ protected abstract BrooklynObjectInternal configure(Map<?, ?> flags);
protected boolean isLegacyConstruction() {
return _legacyConstruction;
@@ -257,8 +249,9 @@ public abstract class AbstractBrooklynObject<PublicSelfType extends BrooklynObje
}
}
+ // XXX always override to get casting correct
@Override
- public RelationSupportInternal<PublicSelfType> relations() {
+ public RelationSupportInternal<?> relations() {
return relations;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java
index 9089095..d3bd9a8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java
@@ -67,7 +67,7 @@ import com.google.common.collect.Maps;
/**
* Common functionality for policies and enrichers
*/
-public abstract class AbstractEntityAdjunct<PublicSelfType extends BrooklynObject,InternalSelfType extends AbstractEntityAdjunct<PublicSelfType,InternalSelfType>> extends AbstractBrooklynObject<PublicSelfType,InternalSelfType> implements BrooklynObjectInternal<PublicSelfType,InternalSelfType>, EntityAdjunct, Configurable {
+public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject implements BrooklynObjectInternal, EntityAdjunct, Configurable {
private static final Logger log = LoggerFactory.getLogger(AbstractEntityAdjunct.class);
private boolean _legacyNoConstructionInit;
@@ -121,7 +121,7 @@ public abstract class AbstractEntityAdjunct<PublicSelfType extends BrooklynObjec
_legacyNoConstructionInit = (properties != null) && Boolean.TRUE.equals(properties.get("noConstructionInit"));
if (isLegacyConstruction()) {
- InternalSelfType checkWeGetThis = configure(properties);
+ AbstractEntityAdjunct checkWeGetThis = configure(properties);
assert this.equals(checkWeGetThis) : this+" configure method does not return itself; returns "+checkWeGetThis+" instead of "+this;
boolean deferConstructionChecks = (properties.containsKey("deferConstructionChecks") && TypeCoercions.coerce(properties.get("deferConstructionChecks"), Boolean.class));
@@ -137,7 +137,7 @@ public abstract class AbstractEntityAdjunct<PublicSelfType extends BrooklynObjec
@Override
@Deprecated
@SuppressWarnings({ "unchecked", "rawtypes" })
- public InternalSelfType configure(Map flags) {
+ public AbstractEntityAdjunct configure(Map flags) {
// TODO only set on first time through
boolean isFirstTime = true;
@@ -178,7 +178,7 @@ public abstract class AbstractEntityAdjunct<PublicSelfType extends BrooklynObjec
}
}
- return (InternalSelfType) this;
+ return this;
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynDynamicType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynDynamicType.java b/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynDynamicType.java
index d7c73dd..3642448 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynDynamicType.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynDynamicType.java
@@ -55,7 +55,7 @@ import com.google.common.collect.Lists;
* for this reason it does *not* implement BrooklynType, but
* callers can call {@link #getSnapshot()} to get a snapshot such instance.
*/
-public abstract class BrooklynDynamicType<T extends BrooklynObject, AbstractT extends AbstractBrooklynObject<T,?>> {
+public abstract class BrooklynDynamicType<T extends BrooklynObject, AbstractT extends AbstractBrooklynObject> {
private static final Logger LOG = LoggerFactory.getLogger(BrooklynDynamicType.class);
@@ -144,7 +144,7 @@ public abstract class BrooklynDynamicType<T extends BrooklynObject, AbstractT ex
* Prefers keys which overwrite other keys, and prefers keys which are lower in the hierarchy;
* logs warnings if there are two conflicting keys which don't have an overwriting relationship.
*/
- protected static void buildConfigKeys(Class<? extends BrooklynObject> clazz, AbstractBrooklynObject<?,?> optionalInstance,
+ protected static void buildConfigKeys(Class<? extends BrooklynObject> clazz, AbstractBrooklynObject optionalInstance,
Map<String, FieldAndValue<ConfigKey<?>>> configKeys) {
ListMultimap<String,FieldAndValue<ConfigKey<?>>> configKeysAll =
ArrayListMultimap.<String, FieldAndValue<ConfigKey<?>>>create();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java b/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java
index 658a9da..2da7463 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java
@@ -31,7 +31,7 @@ import org.apache.brooklyn.util.guava.Maybe;
import com.google.common.annotations.Beta;
-public interface BrooklynObjectInternal<PublicSelfType extends BrooklynObject, InternalSelfType extends BrooklynObjectInternal<PublicSelfType,InternalSelfType>> extends BrooklynObject, Rebindable {
+public interface BrooklynObjectInternal extends BrooklynObject, Rebindable {
void setCatalogItemId(String id);
@@ -124,7 +124,7 @@ public interface BrooklynObjectInternal<PublicSelfType extends BrooklynObject, I
public void unsubscribeAll();
}
- RelationSupportInternal<PublicSelfType> relations();
+ RelationSupportInternal<?> relations();
public interface RelationSupportInternal<T extends BrooklynObject> extends BrooklynObject.RelationSupport<T> {
@Beta
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/policy/AbstractPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/policy/AbstractPolicy.java b/core/src/main/java/org/apache/brooklyn/core/policy/AbstractPolicy.java
index 3cb39e9..3af8176 100644
--- a/core/src/main/java/org/apache/brooklyn/core/policy/AbstractPolicy.java
+++ b/core/src/main/java/org/apache/brooklyn/core/policy/AbstractPolicy.java
@@ -37,7 +37,7 @@ import com.google.common.base.Objects;
/**
* Base {@link Policy} implementation; all policies should extend this or its children
*/
-public abstract class AbstractPolicy extends AbstractEntityAdjunct<Policy,AbstractPolicy> implements Policy, Configurable {
+public abstract class AbstractPolicy extends AbstractEntityAdjunct implements Policy, Configurable {
@SuppressWarnings("unused")
private static final Logger log = LoggerFactory.getLogger(AbstractPolicy.class);
@@ -109,6 +109,12 @@ public abstract class AbstractPolicy extends AbstractEntityAdjunct<Policy,Abstra
return new BasicPolicyRebindSupport(this);
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public RelationSupportInternal<Policy> relations() {
+ return (RelationSupportInternal<Policy>) super.relations();
+ }
+
@Override
public String toString() {
return Objects.toStringHelper(getClass())
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/890c5c04/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java b/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java
index 3694fa8..6483e97 100644
--- a/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/relations/AbstractBasicRelationSupport.java
@@ -26,6 +26,14 @@ import org.apache.brooklyn.core.objs.BrooklynObjectInternal.RelationSupportInter
import brooklyn.basic.relations.Relationship;
+/** This abstract impl delegates to {@link EntityRelations} for all changes, routing through a local backing store.
+ * This allows us to make the changes in both directions simultaneously when a relationship is bi-directional,
+ * and should facilitate changing a backing datastore or remote instances when that is supported.
+ * <p>
+ * Currently it can be implemented without it, simplifying things a bit (avoiding the double dispatch)
+ * apart from the {@link #add(Relationship, BrooklynObject)} method triggering the reverse addition
+ * if it isn't already present. TBD which is better (and the internal call to get the backing store is
+ * marked as Beta). */
public abstract class AbstractBasicRelationSupport<SourceType extends BrooklynObject> implements RelationSupportInternal<SourceType> {
final SourceType source;