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