You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2017/04/21 22:55:26 UTC

[07/39] brooklyn-server git commit: Add nested catalog item ids to AbstractBrooklynObjectSpec.

Add nested catalog item ids to AbstractBrooklynObjectSpec.


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

Branch: refs/heads/master
Commit: 7e88322634490f7d29a9cd9f9977a2b9a111e6a3
Parents: 5d0fe63
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Mon Sep 19 14:22:43 2016 +0100
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Thu Apr 20 11:18:42 2017 +0100

----------------------------------------------------------------------
 .../internal/AbstractBrooklynObjectSpec.java    | 44 ++++++++++++++++++--
 .../brooklyn/spi/creation/CampResolver.java     |  2 +-
 .../brooklyn/catalog/CatalogYamlEntityTest.java |  4 +-
 3 files changed, 43 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/7e883226/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java b/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
index c3d45af..95f791b 100644
--- a/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
+++ b/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
@@ -22,9 +22,12 @@ import static com.google.common.base.Preconditions.checkNotNull;
 
 import java.io.Serializable;
 import java.lang.reflect.Modifier;
+import java.util.ArrayDeque;
 import java.util.Collections;
+import java.util.Deque;
 import java.util.List;
 import java.util.Map;
+import java.util.Queue;
 import java.util.Set;
 
 import org.apache.brooklyn.api.mgmt.EntityManager;
@@ -65,7 +68,7 @@ public abstract class AbstractBrooklynObjectSpec<T,SpecT extends AbstractBrookly
     
     private final Class<? extends T> type;
     private String displayName;
-    private String catalogItemId;
+    private Deque<String> catalogItemIdStack = new ArrayDeque<>();
     private Set<Object> tags = MutableSet.of();
     private List<SpecParameter<?>> parameters = ImmutableList.of();
 
@@ -103,7 +106,23 @@ public abstract class AbstractBrooklynObjectSpec<T,SpecT extends AbstractBrookly
     // if that behaviour is desired, the child should be refactored to be its own item in the catalog BOM
     // (or TODO we add a separate field to record other catalog item IDs that could be applied for searching, see below)
     public SpecT catalogItemId(String val) {
-        catalogItemId = val;
+        catalogItemIdStack.clear();
+        return nestCatalogItemId(val);
+    }
+
+    /**
+     * Adds (stacks) the catalog item id of a wrapping specification.
+     * Does nothing if the value is null.
+     *
+     * Used when we to collect nested item ID's so that *all* can be searched.
+     * e.g. if R3 references R2 which references R1 any one of these might supply config keys
+     * referencing resources or types in their local bundles.
+     */
+    @Beta
+    public SpecT nestCatalogItemId(String val) {
+        if (null != val) {
+            catalogItemIdStack.addFirst(val);
+        }
         return self();
     }
     // TODO in many places (callers to this method) we prefer a wrapper item ID;
@@ -119,7 +138,7 @@ public abstract class AbstractBrooklynObjectSpec<T,SpecT extends AbstractBrookly
         return self();
     }
 
-    
+
     public SpecT tag(Object tag) {
         tags.add(tag);
         return self();
@@ -192,7 +211,24 @@ public abstract class AbstractBrooklynObjectSpec<T,SpecT extends AbstractBrookly
     }
     
     public final String getCatalogItemId() {
-        return catalogItemId;
+        if (catalogItemIdStack.size() != 0) {
+            return catalogItemIdStack.getFirst();
+        }
+        return null;
+    }
+
+    /**
+     * Get immutable list of ids of this object's catalog item and its nested catalog items.
+     * e.g. if the catalog item is defined as
+     * <pre>
+     *     items:
+     *     - id: X
+     *       item: Y
+     * </pre>
+     * then the list will contain X, Y.
+     */
+    public final List<String> getNestedCatalogItemIds() {
+        return ImmutableList.copyOf(catalogItemIdStack);
     }
 
     public final Set<Object> getTags() {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/7e883226/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java
index d8c4194..39f77e0 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java
@@ -115,7 +115,7 @@ class CampResolver {
             throw new IllegalStateException("Creating spec from "+item+", got "+spec.getType()+" which is incompatible with expected "+expectedType);                
         }
 
-        spec.catalogItemIdIfNotNull(item.getId());
+        spec.nestCatalogItemId(item.getId());
         if (!spec.getFlags().containsKey("iconUrl") && item.getIconUrl()!=null) {
             spec.configure("iconUrl", item.getIconUrl());
         }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/7e883226/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
index 5e31142..dff6689 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
@@ -636,8 +636,8 @@ public class CatalogYamlEntityTest extends AbstractYamlTest {
         Entity app = createAndStartApplication(yaml);
         Entity entity = app.getChildren().iterator().next();
 
-        // Fails
-        assertEquals(entity.getCatalogItemId(), ver(symbolicNameInner));
+        assertEquals(entity.getCatalogItemId(), ver(symbolicNameOuter));
+        // TODO check nested ids
 
         deleteCatalogEntity(symbolicNameInner);
         deleteCatalogEntity(symbolicNameOuter);