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/28 15:15:14 UTC

[brooklyn-server] 02/07: tidy spec history summaries, show when based on another type, or when it's the root blueprint

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 4f8c8fe9c945701d591c3035d6c7435e5929d339
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Fri May 28 13:13:51 2021 +0100

    tidy spec history summaries, show when based on another type, or when it's the root blueprint
---
 .../spi/creation/CampTypePlanTransformer.java      |  4 +++-
 .../apache/brooklyn/core/mgmt/BrooklynTags.java    | 14 ++++++++++++-
 .../core/typereg/AbstractTypePlanTransformer.java  | 24 ++++++++++++++++++----
 .../typereg/JavaClassNameTypePlanTransformer.java  |  2 +-
 .../internal/StaticTypePlanTransformer.java        |  4 ++--
 .../typereg/ExampleXmlTypePlanTransformer.java     |  2 +-
 6 files changed, 40 insertions(+), 10 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 b76cd19..5558429 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
@@ -106,7 +106,9 @@ public class CampTypePlanTransformer extends AbstractTypePlanTransformer {
     @Override
     protected AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
         try {
-            return decorateWithHierarchySpecTag(new CampResolver(mgmt, type, context).createSpec(), type, FORMAT, null);
+            return decorateWithHierarchySpecTag(new CampResolver(mgmt, type, context).createSpec(), type, "Brooklyn CAMP", null,
+                    prevHeadSpecSummary -> "Based on "+prevHeadSpecSummary);
+
         } catch (Exception e) {
             Exceptions.propagateIfFatal(e);
             String message = null;
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 38de08a..78a460c 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
@@ -136,13 +136,19 @@ public class BrooklynTags {
         }
 
         public static Builder builder() { return new Builder(); }
+        public static Builder builder(SpecSummary base) { return new Builder(base); }
 
         public static class Builder {
-            private String format;
             private String summary;
+            private String format;
             private Object contents;
 
             private Builder() {}
+            private Builder(SpecSummary base) {
+                summary = base.summary;
+                format = base.format;
+                contents = base.contents;
+            }
 
             public Builder summary(final String summary) {
                 this.summary = summary;
@@ -221,6 +227,12 @@ public class BrooklynTags {
             // usually the list has a single element here, if
             newFirstSpecs.getSpecList().forEach(this::push);
         }
+
+        public SpecSummary pop() {
+            if (getSpecList().isEmpty()) return null;
+            return getSpecList().remove(0);
+        }
+
     }
 
     public static class ListTag<T> {
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 9d4333a..14bba3d 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
@@ -18,7 +18,9 @@
  */
 package org.apache.brooklyn.core.typereg;
 
+import java.util.function.Function;
 import java.util.function.Supplier;
+import javax.annotation.Nullable;
 import org.apache.brooklyn.api.catalog.BrooklynCatalog;
 import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
@@ -27,6 +29,7 @@ import org.apache.brooklyn.api.typereg.RegisteredTypeLoadingContext;
 import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
 import org.apache.brooklyn.core.mgmt.BrooklynTags;
 import org.apache.brooklyn.core.mgmt.BrooklynTags.SpecHierarchyTag;
+import org.apache.brooklyn.core.mgmt.BrooklynTags.SpecHierarchyTag.SpecSummary;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.javalang.JavaClassNames;
@@ -162,10 +165,17 @@ public abstract class AbstractTypePlanTransformer implements BrooklynTypePlanTra
 
     protected abstract Object createBean(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception;
 
-    protected AbstractBrooklynObjectSpec<?,?> decorateWithHierarchySpecTag(AbstractBrooklynObjectSpec<?, ?> spec, RegisteredType type, final String format, final String summary) {
-        final String specSummary = Strings.isBlank(summary)
-                ? format + " plan for " + (Strings.isNonBlank(type.getSymbolicName())? type.getSymbolicName() : type.getDisplayName())
-                : summary;
+    protected AbstractBrooklynObjectSpec<?,?> decorateWithHierarchySpecTag(AbstractBrooklynObjectSpec<?, ?> spec, RegisteredType type,
+                                                                           final String format, @Nullable final String summary,
+                                                                           @Nullable Function<String,String> previousSummaryModification) {
+        final String specSummary = Strings.isNonBlank(summary)
+                ? summary
+                : format + " plan" +
+                    (Strings.isNonBlank(type.getSymbolicName())
+                            ? "for type "+type.getSymbolicName()
+                            : Strings.isNonBlank(type.getDisplayName())
+                                ? "for "+type.getDisplayName()
+                                : "");
 
         BrooklynTags.SpecHierarchyTag.Builder currentSpecTagBuilder = BrooklynTags.SpecHierarchyTag.builder()
                 .format(format)
@@ -174,6 +184,12 @@ public abstract class AbstractTypePlanTransformer implements BrooklynTypePlanTra
 
         SpecHierarchyTag specTag = BrooklynTags.findSpecHierarchyTag(spec.getTags());
         if (specTag != null) {
+            if (!specTag.getSpecList().isEmpty() && previousSummaryModification!=null) {
+                SpecSummary oldHead = specTag.pop();
+                SpecSummary newPrevHead = SpecHierarchyTag.builder(oldHead).summary(
+                        previousSummaryModification.apply(oldHead.summary)).buildSpecSummary();
+                specTag.push(newPrevHead);
+            }
             specTag.push(currentSpecTagBuilder.buildSpecSummary());
         } else {
             specTag = currentSpecTagBuilder.buildSpecHierarchyTag();
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 6bfe0a7..b5e2394 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
@@ -65,7 +65,7 @@ public class JavaClassNameTypePlanTransformer extends AbstractTypePlanTransforme
     @SuppressWarnings({ "unchecked" })
     @Override
     protected AbstractBrooklynObjectSpec<?,?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
-        return  decorateWithHierarchySpecTag(RegisteredTypes.newSpecInstance(mgmt, (Class<? extends BrooklynObject>) getType(type, context)), type, FORMAT, null);
+        return decorateWithHierarchySpecTag(RegisteredTypes.newSpecInstance(mgmt, (Class<? extends BrooklynObject>) getType(type, context)), type, FORMAT, 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 2524564..413bacd 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
@@ -93,9 +93,9 @@ public class StaticTypePlanTransformer extends AbstractTypePlanTransformer {
     @Override
     protected AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
         if (REGISTERED_SPECS.containsKey(type.getSymbolicName()))
-            return decorateWithHierarchySpecTag(get(type.getSymbolicName()), type, FORMAT, null );
+            return decorateWithHierarchySpecTag(get(type.getSymbolicName()), type, FORMAT, null, null);
         if (type.getPlan().getPlanData()!=null && REGISTERED_SPECS.containsKey(type.getPlan().getPlanData()))
-            return decorateWithHierarchySpecTag(get((String)type.getPlan().getPlanData()), type, FORMAT, null);
+            return decorateWithHierarchySpecTag(get((String)type.getPlan().getPlanData()), type, FORMAT, 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 be3bd54..ab8a6cd 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
@@ -69,7 +69,7 @@ public class ExampleXmlTypePlanTransformer extends AbstractTypePlanTransformer {
     @Override
     protected AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
         return decorateWithHierarchySpecTag(toEntitySpec(parseXml((String)type.getPlan().getPlanData()),
-            isApplicationExpected(type, context) ? 0 : 1), type, "example-xml", null);
+            isApplicationExpected(type, context) ? 0 : 1), type, "example-xml", null, null);
     }
 
     private static boolean isApplicationExpected(RegisteredType type, RegisteredTypeLoadingContext context) {