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 2021/05/27 18:21:04 UTC

[brooklyn-server] 12/17: Added support for SpecTags and creation for types when added to the catalog

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

commit 79b1a83ea6d5aa1cd2cbb72e0338ae1680569a57
Author: iuliana <iu...@cloudsoft.io>
AuthorDate: Wed May 26 17:27:44 2021 +0100

    Added support for SpecTags and creation for types when added to the catalog
---
 .../CatalogYamlEntityOsgiTypeRegistryTest.java     | 33 ++++++++++++++++++++++
 .../catalog/internal/BasicBrooklynCatalog.java     |  1 +
 .../brooklyn/core/typereg/RegisteredTypes.java     | 15 +++++++++-
 3 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityOsgiTypeRegistryTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityOsgiTypeRegistryTest.java
index 7aa4a6a..ab1c46e 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityOsgiTypeRegistryTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityOsgiTypeRegistryTest.java
@@ -20,7 +20,9 @@ package org.apache.brooklyn.camp.brooklyn.catalog;
 
 import java.util.Map;
 import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.camp.brooklyn.spi.creation.CampTypePlanTransformer;
 import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
+import org.apache.brooklyn.core.mgmt.BrooklynTags;
 import org.apache.brooklyn.core.test.entity.TestEntity;
 import org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
 import org.apache.brooklyn.entity.stock.BasicEntity;
@@ -34,6 +36,9 @@ import org.testng.annotations.Test;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Iterables;
 
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
 /** Variant of parent tests using OSGi, bundles, and type registry, instead of lightweight non-osgi catalog */
 @Test
 public class CatalogYamlEntityOsgiTypeRegistryTest extends CatalogYamlEntityTest {
@@ -210,6 +215,34 @@ public class CatalogYamlEntityOsgiTypeRegistryTest extends CatalogYamlEntityTest
         deleteCatalogRegisteredType(symbolicName);
     }
 
+    @Test
+    public void testAddCatalogItemWithHierarchyTag() throws Exception {
+        String symbolicName = "my.catalog.app.id.load";
+        addCatalogItems(
+                "brooklyn.catalog:",
+                "  id: " + symbolicName,
+                "  version: " + TEST_VERSION,
+                "  tags:",
+                "  - "+ BrooklynTags.YAML_SPEC_HIERARCHY +": ",
+                "           format: " + CampTypePlanTransformer.FORMAT,
+                "           summary:  Plan for " + symbolicName,
+                "           contents:  | " ,
+                "               line 1" ,
+                "               line 2" ,
+                "  itemType: entity",
+                "  item: " + BasicEntity.class.getName());
+
+        RegisteredType item = mgmt().getTypeRegistry().get(symbolicName, TEST_VERSION);
+        assertTrue(item.getTags().stream().anyMatch(tag -> tag instanceof BrooklynTags.SpecTag));
+
+        BrooklynTags.SpecTag specTag = (BrooklynTags.SpecTag) item.getTags().stream().filter(x -> x instanceof BrooklynTags.SpecTag).findFirst().orElse(null);
+        assertEquals(specTag.getSpecList().size(), 1);
+        Asserts.assertEquals(((Map<String,String>)specTag.getSpecList().get(0)).get("format"), CampTypePlanTransformer.FORMAT);
+        Asserts.assertEquals(((Map<String,String>)specTag.getSpecList().get(0)).get("summary"), "Plan for " + symbolicName);
+
+        deleteCatalogRegisteredType(symbolicName);
+    }
+
 
     // also runs many other tests from super, here using the osgi/type-registry appraoch
 
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 17bc166..5cf49b4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -661,6 +661,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
         catalogMetadata.put("tags", MutableSet.copyOf(getFirstAs(parentMetadata, Collection.class, "tags").orNull())
             .putAll(getFirstAs(itemMetadataWithoutItemDef, Collection.class, "tags").orNull()) );
 
+
         // brooklyn.libraries we treat specially, to append the list, with the child's list preferred in classloading order
         // `libraries` is supported in some places as a legacy syntax; it should always be `brooklyn.libraries` for new apps
         // TODO in 0.8.0 require brooklyn.libraries, don't allow "libraries" on its own
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
index 5792248..e58d34d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java
@@ -333,7 +333,20 @@ public class RegisteredTypes {
     @Beta
     public static RegisteredType addTag(RegisteredType type, Object tag) {
         if (tag!=null) {
-            ((BasicRegisteredType)type).tags.add( tag );
+            if (tag instanceof Map) {
+                Map<String,Object> mapTag = (Map<String,Object>) tag;
+                if(mapTag.containsKey(BrooklynTags.YAML_SPEC_HIERARCHY)) {
+                    Map<String,String> hierarchySpecTag = (Map<String,String>) mapTag.get(BrooklynTags.YAML_SPEC_HIERARCHY);
+                    BrooklynTags.SpecTag currentSpecTag = new BrooklynTags.HierarchySpecTagBuilder()
+                            .format(hierarchySpecTag.get("format"))
+                            .summary(hierarchySpecTag.get("summary"))
+                            .contents(hierarchySpecTag.get("contents"))
+                            .build();
+                    ((BasicRegisteredType)type).tags.add( currentSpecTag );
+                }
+            } else {
+                ((BasicRegisteredType) type).tags.add(tag);
+            }
         }
         return type;
     }