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 17d95d612d add child tags at start of list, in front of parent tags
17d95d612d is described below
commit 17d95d612de7d369a3fd27c56c55acd8294e7e3b
Author: Alex Heneveld <[email protected]>
AuthorDate: Tue Dec 6 09:28:07 2022 +0000
add child tags at start of list, in front of parent tags
this causes the right icon to be found by findFirst (and any other things
that use findFirst)
---
.../api/internal/AbstractBrooklynObjectSpec.java | 8 +++++
.../apache/brooklyn/api/objs/BrooklynObject.java | 3 +-
.../creation/BrooklynEntityDecorationResolver.java | 11 +++++--
.../brooklyn/camp/brooklyn/EntitiesYamlTest.java | 37 ++++++++++++++++++++++
.../catalog/internal/CatalogItemDtoAbstract.java | 14 ++++++++
.../brooklyn/core/objs/AbstractBrooklynObject.java | 13 ++++++++
6 files changed, 83 insertions(+), 3 deletions(-)
diff --git
a/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
b/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
index 20b50d9069..cb8679614d 100644
---
a/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
+++
b/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java
@@ -218,6 +218,14 @@ public abstract class AbstractBrooklynObjectSpec<T, SpecT
extends AbstractBrookl
return self();
}
+ public SpecT tagsAddAtStart(Iterable<? extends Object> tagsToAdd) {
+ MutableSet<Object> oldTags = MutableSet.copyOf(this.tags);
+ tags.clear();
+ Iterables.addAll(this.tags, tagsToAdd);
+ Iterables.addAll(this.tags, oldTags);
+ return self();
+ }
+
/**
* replaces tags with the given
*/
diff --git a/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java
b/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java
index 95afe9ee9a..e44f74be1f 100644
--- a/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java
+++ b/api/src/main/java/org/apache/brooklyn/api/objs/BrooklynObject.java
@@ -120,7 +120,8 @@ public interface BrooklynObject extends Identifiable,
Configurable {
boolean addTag(@Nonnull Object tag);
boolean addTags(@Nonnull Iterable<?> tags);
-
+ boolean addTagsAtStart(@Nonnull Iterable<?> tags);
+
boolean removeTag(@Nonnull Object tag);
}
diff --git
a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
index 7da9d97840..256ba697b0 100644
---
a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
+++
b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java
@@ -276,13 +276,20 @@ public abstract class
BrooklynEntityDecorationResolver<DT> {
@Override
public void decorate(EntitySpec<?> entitySpec, ConfigBag attrs,
Set<String> encounteredRegisteredTypeIds) {
+ /* 2022-12 we now add tags at the start, so children tags get
found before parent tags;
+ * this causes eg icons to resolve correctly (not take parent
icons), and in general a cleaner tags list
+ * (might be nice eventually to have a dedicated field for
iconUrl, like we do on registered types,
+ * but this seems worth doing as well, and is sufficient to solve
the problem of parent icons)
+ */
+
Iterable<Object> decorationAttributeJsonValue =
getDecorationAttributeJsonValue(attrs);
if (decorationAttributeJsonValue != null) {
- entitySpec.tagsAdd(decorationAttributeJsonValue);
+ entitySpec.tagsAddAtStart(decorationAttributeJsonValue);
}
+
String iconUrl = attrs.get(BrooklynConfigKeys.ICON_URL);
if (iconUrl!=null) {
-
entitySpec.tagsAdd(MutableList.of(BrooklynTags.newIconUrlTag(iconUrl)));
+
entitySpec.tagsAddAtStart(MutableList.of(BrooklynTags.newIconUrlTag(iconUrl)));
}
}
diff --git
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/EntitiesYamlTest.java
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/EntitiesYamlTest.java
index 5ff1a707e8..4220131ac9 100644
---
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/EntitiesYamlTest.java
+++
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/EntitiesYamlTest.java
@@ -20,6 +20,8 @@ package org.apache.brooklyn.camp.brooklyn;
import org.apache.brooklyn.api.entity.EntityInitializer;
import
org.apache.brooklyn.camp.brooklyn.TestSensorAndEffectorInitializerBase.*;
+import org.apache.brooklyn.core.mgmt.BrooklynTags;
+import org.apache.brooklyn.core.typereg.RegisteredTypes;
import org.apache.brooklyn.util.core.config.ConfigBag;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
@@ -1271,4 +1273,39 @@ public class EntitiesYamlTest extends AbstractYamlTest {
Assert.assertEquals(camp.platformComponentTemplates().links().size(),
0);
Assert.assertEquals(camp.platformComponents().links().size(), 0);
}
+
+ public void testIconUrlInheritance() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " itemType: entity",
+ " items:",
+
+ " - id: parent",
+ " item:",
+ " type: " + TestEntity.class.getName(),
+ " name: Parent",
+ " iconUrl: http://parent/",
+
+ " - id: child",
+ " item:",
+ " type: parent",
+ " name: Child",
+ " iconUrl: http://child/",
+
+ " - id: grandchild",
+ " item:",
+ " type: child",
+ " name: Grandchild");
+
+
+
+ Entity app = createAndStartApplication(
+ "services:",
+ "- type: grandchild");
+
+ Entity child = Iterables.getOnlyElement(app.getChildren());
+ Asserts.assertEquals(RegisteredTypes.getIconUrl(child),
"http://child/");
+ Asserts.assertEquals(child.getDisplayName(), "Grandchild");
+ }
+
}
diff --git
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
index 7292bc4076..b361162490 100644
---
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
+++
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDtoAbstract.java
@@ -35,6 +35,7 @@ import org.apache.brooklyn.core.objs.AbstractBrooklynObject;
import org.apache.brooklyn.core.relations.EmptyRelationSupport;
import org.apache.brooklyn.core.typereg.RegisteredTypeNaming;
import org.apache.brooklyn.util.collections.MutableList;
+import org.apache.brooklyn.util.collections.MutableSet;
import org.apache.brooklyn.util.core.flags.FlagUtils;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.http.auth.Credentials;
@@ -314,6 +315,19 @@ public abstract class CatalogItemDtoAbstract<T, SpecT>
extends AbstractBrooklynO
return result;
}
+ @Override
+ public boolean addTagsAtStart(Iterable<?> newTags) {
+ boolean result;
+ synchronized (tags) {
+ MutableSet<Object> oldTags = MutableSet.copyOf(tags);
+ tags.clear();
+ Iterables.addAll(tags, newTags);
+ result = Iterables.addAll(tags, oldTags);
+ }
+ onTagsChanged();
+ return result;
+ }
+
@Override
public boolean removeTag(Object tag) {
boolean result;
diff --git
a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java
b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java
index a725633776..a2d6897cc9 100644
---
a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java
+++
b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java
@@ -295,6 +295,19 @@ public abstract class AbstractBrooklynObject implements
BrooklynObjectInternal {
return result;
}
+ @Override
+ public boolean addTagsAtStart(Iterable<?> newTags) {
+ boolean result;
+ synchronized (tags) {
+ MutableSet<Object> oldTags = MutableSet.copyOf(tags);
+ tags.clear();
+ Iterables.addAll(tags, newTags);
+ result = Iterables.addAll(tags, oldTags);
+ }
+ onTagsChanged();
+ return result;
+ }
+
@Override
public boolean removeTag(Object tag) {
boolean result;