This is an automated email from the ASF dual-hosted git repository.
heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
The following commit(s) were added to refs/heads/master by this push:
new 6110445 persist the actual types of relationships if not standard ones
new 8b027b1 This closes #1212
6110445 is described below
commit 611044587a66fecf1a19f507e73dc707c4da75bf
Author: Alex Heneveld <[email protected]>
AuthorDate: Mon Jul 26 11:09:19 2021 +0100
persist the actual types of relationships if not standard ones
this allows properties etc on extension of relationships to be persisted
and rebinded
---
.../apache/brooklyn/api/mgmt/rebind/mementos/EntityMemento.java | 2 +-
.../org/apache/brooklyn/api/mgmt/rebind/mementos/Memento.java | 5 +++--
.../core/mgmt/rebind/AbstractBrooklynObjectRebindSupport.java | 9 +++++++--
.../apache/brooklyn/core/mgmt/rebind/dto/AbstractMemento.java | 6 +++---
.../apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java | 9 ++++++++-
5 files changed, 22 insertions(+), 9 deletions(-)
diff --git
a/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/mementos/EntityMemento.java
b/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/mementos/EntityMemento.java
index d073836..c930c91 100644
---
a/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/mementos/EntityMemento.java
+++
b/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/mementos/EntityMemento.java
@@ -57,7 +57,7 @@ public interface EntityMemento extends Memento, TreeNode {
/**
* The ids of the member entities, if this is a Group; otherwise empty.
*
- * @see Group.getMembers()
+ * @see org.apache.brooklyn.api.entity.Group#getMembers
*/
public List<String> getMembers();
diff --git
a/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/mementos/Memento.java
b/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/mementos/Memento.java
index 71fc587..6d6fdb0 100644
---
a/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/mementos/Memento.java
+++
b/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/mementos/Memento.java
@@ -86,8 +86,9 @@ public interface Memento extends Serializable {
Class<?> getTypeClass();
Collection<Object> getTags();
-
- Map<String,Set<String>> getRelations();
+
+ /** Key can be relationship name if a standard one, or an object. */
+ Map<Object,Set<String>> getRelations();
/** Null for {@link Entity}, but important for adjuncts; see {@link
EntityAdjunct#getUniqueTag()} */
String getUniqueTag();
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 df5f9ae..499bef9 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
@@ -84,8 +84,13 @@ public abstract class AbstractBrooklynObjectRebindSupport<T
extends Memento> imp
@SuppressWarnings({ "unchecked", "rawtypes" })
protected void addRelations(RebindContext rebindContext, T memento) {
- for (Map.Entry<String,Set<String>> rEntry :
memento.getRelations().entrySet()) {
- RelationshipType<? extends BrooklynObject, ? extends
BrooklynObject> r = EntityRelations.lookup(instance.getManagementContext(),
rEntry.getKey());
+ for (Map.Entry<Object,Set<String>> rEntry :
memento.getRelations().entrySet()) {
+ RelationshipType<? extends BrooklynObject, ? extends
BrooklynObject> r;
+ r = (rEntry.getKey() instanceof RelationshipType)
+ ? (RelationshipType<? extends BrooklynObject, ? extends
BrooklynObject>) rEntry.getKey()
+ : rEntry.getKey() instanceof String
+ ?
EntityRelations.lookup(instance.getManagementContext(), (String)
rEntry.getKey())
+ : null;
if (r==null) throw new IllegalStateException("Unsupported
relationship -- "+rEntry.getKey() + " -- in "+memento);
for (String itemId: rEntry.getValue()) {
BrooklynObject item = rebindContext.lookup().lookup(null,
itemId);
diff --git
a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/AbstractMemento.java
b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/AbstractMemento.java
index 0f398d3..d3f1c85 100644
---
a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/AbstractMemento.java
+++
b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/AbstractMemento.java
@@ -49,7 +49,7 @@ public abstract class AbstractMemento implements Memento,
Serializable {
protected List<String> searchPath;
protected Map<String, Object> customFields = Maps.newLinkedHashMap();
protected List<Object> tags = Lists.newArrayList();
- protected Map<String,Set<String>> relations = Maps.newLinkedHashMap();
+ protected Map<Object,Set<String>> relations = Maps.newLinkedHashMap();
// only supported for EntityAdjuncts
protected String uniqueTag;
@@ -95,7 +95,7 @@ public abstract class AbstractMemento implements Memento,
Serializable {
protected String catalogItemId;
private List<String> searchPath = Lists.newArrayList();
private List<Object> tags;
- private Map<String,Set<String>> relations;
+ private Map<Object,Set<String>> relations;
// for EntityAdjuncts; not used for entity
private String uniqueTag;
@@ -178,7 +178,7 @@ public abstract class AbstractMemento implements Memento,
Serializable {
}
@Override
- public Map<String,Set<String>> getRelations() {
+ public Map<Object,Set<String>> getRelations() {
return fromPersistedMap(relations);
}
diff --git
a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
index 0506d69..51e3e6f 100644
---
a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
+++
b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
@@ -53,10 +53,12 @@ import
org.apache.brooklyn.core.catalog.internal.CatalogItemDo;
import org.apache.brooklyn.core.enricher.AbstractEnricher;
import org.apache.brooklyn.core.entity.EntityDynamicType;
import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.entity.EntityRelations;
import org.apache.brooklyn.core.feed.AbstractFeed;
import org.apache.brooklyn.core.location.internal.LocationInternal;
import org.apache.brooklyn.core.mgmt.persist.BrooklynPersistenceUtils;
import
org.apache.brooklyn.core.mgmt.rebind.AbstractBrooklynObjectRebindSupport;
+import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
import org.apache.brooklyn.core.objs.BrooklynTypes;
import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -382,7 +384,12 @@ public class MementosGenerators {
Set relations =
instance.relations().getRelations((RelationshipType)relationship);
Set<String> relationIds = Sets.newLinkedHashSet();
for (Object r: relations) relationIds.add(
((BrooklynObject)r).getId() );
- builder.relations.put(relationship.getRelationshipTypeName(),
relationIds);
+
+ // key is string name if known relationship type, otherwise the
relationship type object
+ Object relTest = EntityRelations.lookup(
((BrooklynObjectInternal)instance).getManagementContext(),
relationship.getRelationshipTypeName() );
+ Object rKey = relationship.equals(relTest) ?
relationship.getRelationshipTypeName() : relationship;
+
+ builder.relations.put(rKey, relationIds);
}
}