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

Reply via email to