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