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