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 <[email protected]>
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;
     }

Reply via email to