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 <[email protected]> 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) {
