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/09/21 19:46:40 UTC

[brooklyn-server] branch master updated: tidy text for spec hierarchy and ensure `tags` and `brooklyn.tags` get combined

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


The following commit(s) were added to refs/heads/master by this push:
     new 9e056d4  tidy text for spec hierarchy and ensure `tags` and `brooklyn.tags` get combined
9e056d4 is described below

commit 9e056d490cbf109c8b9daf91ba13ff95582d1a31
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Tue Sep 21 20:45:36 2021 +0100

    tidy text for spec hierarchy and ensure `tags` and `brooklyn.tags` get combined
    
    previously `tags` would be interpreted as a flag and clobber the brookln.tags understood by the spec
---
 .../spi/creation/CampTypePlanTransformer.java      |  7 +++--
 .../camp/brooklyn/spi/dsl/TagsYamlTest.java        | 34 ++++++++++++++++++++++
 .../apache/brooklyn/core/mgmt/BrooklynTags.java    |  6 +++-
 .../core/objs/proxy/InternalEntityFactory.java     |  8 ++++-
 .../core/typereg/AbstractTypePlanTransformer.java  | 16 ++++++++--
 .../typereg/JavaClassNameTypePlanTransformer.java  |  2 +-
 .../internal/StaticTypePlanTransformer.java        |  4 +--
 .../typereg/ExampleXmlTypePlanTransformer.java     |  2 +-
 .../brooklyn/rest/transform/TypeTransformer.java   |  5 +++-
 .../org/apache/brooklyn/util/text/Strings.java     |  5 ++++
 10 files changed, 78 insertions(+), 11 deletions(-)

diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampTypePlanTransformer.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampTypePlanTransformer.java
index 84717fc..4eaa8c4 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampTypePlanTransformer.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampTypePlanTransformer.java
@@ -37,6 +37,7 @@ import org.apache.brooklyn.util.guava.Maybe;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.brooklyn.util.javalang.Boxing;
+import org.apache.brooklyn.util.text.Strings;
 
 public class CampTypePlanTransformer extends AbstractTypePlanTransformer {
 
@@ -109,8 +110,10 @@ public class CampTypePlanTransformer extends AbstractTypePlanTransformer {
     @Override
     protected AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
         try {
-            return decorateWithCommonTags(new CampResolver(mgmt, type, context).createSpec(),
-                    type, null, null, prevHeadSpecSummary -> "Based on "+prevHeadSpecSummary);
+            return decorateWithCommonTagsModifyingSpecSummary(new CampResolver(mgmt, type, context).createSpec(),
+                    type, null, null, prevHeadSpecSummary ->
+                            prevHeadSpecSummary.summary.startsWith(prevHeadSpecSummary.format) ? "Based on "+prevHeadSpecSummary.summary :
+                                    prevHeadSpecSummary.summary);
 
         } catch (Exception e) {
             Exceptions.propagateIfFatal(e);
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/TagsYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/TagsYamlTest.java
index d9bdec1..e730c2b 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/TagsYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/TagsYamlTest.java
@@ -15,6 +15,7 @@
  */
 package org.apache.brooklyn.camp.brooklyn.spi.dsl;
 
+import org.apache.brooklyn.entity.stock.BasicEntity;
 import static org.testng.Assert.assertTrue;
 
 import javax.annotation.Nullable;
@@ -133,6 +134,39 @@ public class TagsYamlTest extends AbstractYamlTest {
         assertTrue(app.tags().getTags().contains("myval"));
     }
 
+    @Test
+    public void testBrooklynCampApplicationTag() throws Exception {
+        final Entity app = createAndStartApplication(
+                "services:",
+                "- type: " + BasicEntity.class.getName(),
+                "tags:",
+                "- oldStyle",
+                "brooklyn.tags:",
+                "- newStyle");
+        assertTrue(app.tags().getTags().contains("oldStyle"));
+        assertTrue(app.tags().getTags().contains("newStyle"));
+    }
+
+    @Test
+    public void testBrooklynCampApplicationNewStyleOnlyTag() throws Exception {
+        final Entity app = createAndStartApplication(
+                "services:",
+                "- type: " + BasicEntity.class.getName(),
+                "brooklyn.tags:",
+                "- newStyle");
+        assertTrue(app.tags().getTags().contains("newStyle"));
+    }
+
+    @Test
+    public void testBrooklynCampApplicationOldStyleOnlyTag() throws Exception {
+        final Entity app = createAndStartApplication(
+                "services:",
+                "- type: " + BasicEntity.class.getName(),
+                "tags:",
+                "- oldStyle");
+        assertTrue(app.tags().getTags().contains("oldStyle"));
+    }
+
     public static class TagsTestObject {
         public TagsTestObject() {}
         public TagsTestObject(Object arg1) {}
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
index 1b43c0a..a9188c1 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java
@@ -304,11 +304,15 @@ public class BrooklynTags {
             return specList.remove(0);
         }
 
+        @Beta @Deprecated /** @deprecated since 1.1 use {@link #modifyHeadSpecSummary(List, java.util.function.Function)} */
         public static boolean modifyHeadSummary(List<SpecSummary> specList, java.util.function.Function<String, String> previousSummaryModification) {
+            return modifyHeadSpecSummary(specList, s -> previousSummaryModification.apply(s.summary));
+        }
+        public static boolean modifyHeadSpecSummary(List<SpecSummary> specList, java.util.function.Function<SpecSummary, String> previousSummaryModification) {
             if (!specList.isEmpty() && previousSummaryModification!=null) {
                 SpecSummary oldHead = popFromList(specList);
                 SpecSummary newPrevHead = SpecSummary.builder(oldHead).summary(
-                        previousSummaryModification.apply(oldHead.summary)).build();
+                        previousSummaryModification.apply(oldHead)).build();
                 pushToList(specList, newPrevHead);
                 return true;
             }
diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
index 4e485dd..003da32 100644
--- a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
+++ b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalEntityFactory.java
@@ -50,6 +50,7 @@ import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
 import org.apache.brooklyn.util.core.flags.FlagUtils;
+import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.javalang.AggregateClassLoader;
@@ -303,7 +304,12 @@ public class InternalEntityFactory extends InternalFactory {
                 entity.tags().addTags(spec.getTags());
                 addSpecParameters(spec, theEntity.getMutableEntityType());
 
-                theEntity.configure(MutableMap.copyOf(spec.getFlags()));
+                Map<String, ?> flags = MutableMap.copyOf(spec.getFlags());
+                Object extraTags = flags.remove("tags");
+                if (extraTags!=null) {
+                    theEntity.tags().addTags(TypeCoercions.coerce(extraTags, Iterable.class));
+                }
+                theEntity.configure(flags);
                 for (Entry<ConfigKey<?>, Object> entry : spec.getConfig().entrySet()) {
                     entity.config().set((ConfigKey) entry.getKey(), entry.getValue());
                 }
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/AbstractTypePlanTransformer.java b/core/src/main/java/org/apache/brooklyn/core/typereg/AbstractTypePlanTransformer.java
index 2716770..b3aa038 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/AbstractTypePlanTransformer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/AbstractTypePlanTransformer.java
@@ -172,9 +172,18 @@ public abstract class AbstractTypePlanTransformer implements BrooklynTypePlanTra
 
     protected abstract Object createBean(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception;
 
+    @Beta
+    @Deprecated /** @deprecated since 1.1.0 when introduced */
     protected AbstractBrooklynObjectSpec<?,?> decorateWithCommonTags(AbstractBrooklynObjectSpec<?, ?> spec, RegisteredType type,
                                                                      @Nullable String format, @Nullable String summary,
                                                                      @Nullable Function<String,String> previousSummaryModification) {
+        return decorateWithCommonTagsModifyingSpecSummary(spec, type, format, summary,
+                previousSummaryModification==null ? null : s -> previousSummaryModification.apply(s.summary));
+    }
+    @Beta
+    protected AbstractBrooklynObjectSpec<?,?> decorateWithCommonTagsModifyingSpecSummary(AbstractBrooklynObjectSpec<?, ?> spec, RegisteredType type,
+                                                                     @Nullable String format, @Nullable String summary,
+                                                                     @Nullable Function<SpecSummary,String> previousSummaryModification) {
         if (Strings.isBlank(format)) format = getFormatCode();
         final String specSummaryText = Strings.isNonBlank(summary)
                 ? summary
@@ -193,7 +202,7 @@ public abstract class AbstractTypePlanTransformer implements BrooklynTypePlanTra
 
         List<SpecSummary> specTag = BrooklynTags.findSpecHierarchyTag(spec.getTags());
         if (specTag != null) {
-            SpecSummary.modifyHeadSummary(specTag, previousSummaryModification);
+            SpecSummary.modifyHeadSpecSummary(specTag, previousSummaryModification);
             SpecSummary.pushToList(specTag, specSummary);
         } else {
             specTag = MutableList.of(specSummary);
@@ -201,7 +210,10 @@ public abstract class AbstractTypePlanTransformer implements BrooklynTypePlanTra
 
         List<SpecSummary> sources = BrooklynTags.findSpecHierarchyTag(type.getTags());
         if (sources != null) {
-            SpecSummary.modifyHeadSummary(specTag, s -> "Converted for catalog to "+s);
+            SpecSummary.modifyHeadSpecSummary(specTag, s ->
+                    s.summary.startsWith(s.format) ? "Converted for catalog to "+s.summary :
+                    s.summary.contains(s.format) ? s.summary + ", converted for catalog" :
+                    s.summary + ", converted to "+s.format+" for catalog");
             SpecSummary.pushToList(specTag, sources);
         }
         BrooklynTags.upsertSingleKeyMapValueTag(spec, BrooklynTags.SPEC_HIERARCHY, specTag);
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/JavaClassNameTypePlanTransformer.java b/core/src/main/java/org/apache/brooklyn/core/typereg/JavaClassNameTypePlanTransformer.java
index 1e9fdcc..dc95695 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/JavaClassNameTypePlanTransformer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/JavaClassNameTypePlanTransformer.java
@@ -64,7 +64,7 @@ public class JavaClassNameTypePlanTransformer extends AbstractTypePlanTransforme
     @SuppressWarnings({ "unchecked" })
     @Override
     protected AbstractBrooklynObjectSpec<?,?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
-        return decorateWithCommonTags(RegisteredTypes.newSpecInstance(mgmt, (Class<? extends BrooklynObject>) getType(type, context)), type, null, null, null);
+        return decorateWithCommonTagsModifyingSpecSummary(RegisteredTypes.newSpecInstance(mgmt, (Class<? extends BrooklynObject>) getType(type, context)), type, null, null, null);
     }
 
     @Override
diff --git a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/StaticTypePlanTransformer.java b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/StaticTypePlanTransformer.java
index a0e8388..6861120 100644
--- a/core/src/test/java/org/apache/brooklyn/core/catalog/internal/StaticTypePlanTransformer.java
+++ b/core/src/test/java/org/apache/brooklyn/core/catalog/internal/StaticTypePlanTransformer.java
@@ -92,9 +92,9 @@ public class StaticTypePlanTransformer extends AbstractTypePlanTransformer {
     @Override
     protected AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
         if (REGISTERED_SPECS.containsKey(type.getSymbolicName()))
-            return decorateWithCommonTags(get(type.getSymbolicName()), type, null, null, null);
+            return decorateWithCommonTagsModifyingSpecSummary(get(type.getSymbolicName()), type, null, null, null);
         if (type.getPlan().getPlanData()!=null && REGISTERED_SPECS.containsKey(type.getPlan().getPlanData()))
-            return decorateWithCommonTags(get((String)type.getPlan().getPlanData()), type, null, null, null);
+            return decorateWithCommonTagsModifyingSpecSummary(get((String)type.getPlan().getPlanData()), type, null, null, null);
         return null;
     }
 
diff --git a/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformer.java b/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformer.java
index 320ac00..2d44e31 100644
--- a/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformer.java
+++ b/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformer.java
@@ -67,7 +67,7 @@ public class ExampleXmlTypePlanTransformer extends AbstractTypePlanTransformer {
 
     @Override
     protected AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
-        return decorateWithCommonTags(toEntitySpec(parseXml((String)type.getPlan().getPlanData()),
+        return decorateWithCommonTagsModifyingSpecSummary(toEntitySpec(parseXml((String)type.getPlan().getPlanData()),
             isApplicationExpected(type, context) ? 0 : 1), type, "example-xml", null, null);
     }
 
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TypeTransformer.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TypeTransformer.java
index a047a85..9812e2c 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TypeTransformer.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TypeTransformer.java
@@ -113,7 +113,10 @@ public class TypeTransformer {
         List<SpecSummary> specList = MutableList.of(currentSpec);
         if(specTag!= null){
             // put the original spec tags first
-            SpecSummary.modifyHeadSummary(specList, s -> "Converted to "+s);
+            SpecSummary.modifyHeadSpecSummary(specList, s ->
+                    s.summary.startsWith(s.format) ? "Converted to "+s :
+                    s.summary.contains(s.format) ? s.summary + ", converted" :
+                    s.summary + ", converted to "+s.format);
             SpecSummary.pushToList(specList, specTag);
         }
         result.setExtraField("specList", specList);
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java b/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java
index e7fad46..cd72af7 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/text/Strings.java
@@ -668,6 +668,11 @@ public class Strings {
         return value.substring(0, 1).toUpperCase(Locale.ENGLISH) + value.substring(1).toLowerCase(Locale.ENGLISH);
     }
 
+    public static String toInitialLowerCase(String value) {
+        if (value==null || value.length()==0) return value;
+        return value.substring(0, 1).toLowerCase(Locale.ENGLISH) + value.substring(1);
+    }
+
     public static String reverse(String name) {
         return new StringBuffer(name).reverse().toString();
     }