Repository: brooklyn-server Updated Branches: refs/heads/master f07b6f06a -> e247841dd
change handling of icon url storage previously we'd set iconUrl from a flag in AbstractEntity, but that field was never persisted. now: * that field is removed (since it wasn't persisted this shouldn't affect rebind) * iconUrl is done by looking up the catalog item if nothing special is found on the object (usual path) * if a special iconUrl is wanted on an instance, it should be set as a tag; this means it's persisted, and it can be done for any brooklyn object Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/40fdfaf2 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/40fdfaf2 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/40fdfaf2 Branch: refs/heads/master Commit: 40fdfaf200885fcad119dbcca55e9aa27c82a993 Parents: 00d8789 Author: Alex Heneveld <[email protected]> Authored: Fri Apr 28 15:57:45 2017 +0100 Committer: Alex Heneveld <[email protected]> Committed: Tue May 2 11:43:47 2017 +0100 ---------------------------------------------------------------------- .../org/apache/brooklyn/api/entity/Entity.java | 5 ++++ .../internal/AbstractBrooklynObjectSpec.java | 6 ++-- .../BrooklynEntityDecorationResolver.java | 31 ++++++++++---------- .../spi/creation/BrooklynEntityMatcher.java | 4 +++ .../brooklyn/spi/creation/CampResolver.java | 3 -- .../core/catalog/internal/CatalogItemDo.java | 5 ++++ .../brooklyn/core/entity/AbstractEntity.java | 15 ++++------ .../core/entity/BrooklynConfigKeys.java | 2 ++ .../apache/brooklyn/core/mgmt/BrooklynTags.java | 5 ++++ .../core/objs/AbstractBrooklynObject.java | 1 + .../core/objs/BrooklynObjectInternal.java | 3 ++ .../brooklyn/core/typereg/RegisteredTypes.java | 17 +++++++++++ .../rest/resources/ApplicationResource.java | 2 +- .../brooklyn/rest/resources/EntityResource.java | 2 +- .../rest/util/BrooklynRestResourceUtils.java | 4 +-- 15 files changed, 71 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java index b8e13b7..da9169e 100644 --- a/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java +++ b/api/src/main/java/org/apache/brooklyn/api/entity/Entity.java @@ -38,6 +38,7 @@ import org.apache.brooklyn.api.sensor.EnricherSpec; import org.apache.brooklyn.api.sensor.Feed; import org.apache.brooklyn.api.sensor.Sensor; import org.apache.brooklyn.api.sensor.SensorEvent; +import org.apache.brooklyn.api.typereg.RegisteredType; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.config.ConfigKey.HasConfigKey; import org.apache.brooklyn.util.guava.Maybe; @@ -78,7 +79,11 @@ public interface Entity extends BrooklynObject { /** * A URL pointing to an image which can be used to represent this entity. + * @deprecated since 0.12.0 look up the {@link RegisteredType} and use its + * {@link RegisteredType#getIconUrl()} or use conveniences such as + * <code>RegisteredTypes.getIconUrl()</code>. */ + @Deprecated @Nullable String getIconUrl(); /** http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/api/src/main/java/org/apache/brooklyn/api/internal/AbstractBrooklynObjectSpec.java ---------------------------------------------------------------------- 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 adbb48b..b53722d 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 @@ -195,14 +195,14 @@ public abstract class AbstractBrooklynObjectSpec<T, SpecT extends AbstractBrookl /** * adds the given tags */ - public SpecT tags(Iterable<Object> tagsToAdd) { + public SpecT tags(Iterable<? extends Object> tagsToAdd) { return tagsAdd(tagsToAdd); } /** * adds the given tags */ - public SpecT tagsAdd(Iterable<Object> tagsToAdd) { + public SpecT tagsAdd(Iterable<? extends Object> tagsToAdd) { Iterables.addAll(this.tags, tagsToAdd); return self(); } @@ -210,7 +210,7 @@ public abstract class AbstractBrooklynObjectSpec<T, SpecT extends AbstractBrookl /** * replaces tags with the given */ - public SpecT tagsReplace(Iterable<Object> tagsToReplace) { + public SpecT tagsReplace(Iterable<? extends Object> tagsToReplace) { this.tags.clear(); Iterables.addAll(this.tags, tagsToReplace); return self(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityDecorationResolver.java ---------------------------------------------------------------------- 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 ca47f7e..181fa67 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 @@ -18,18 +18,12 @@ */ package org.apache.brooklyn.camp.brooklyn.spi.creation; -import java.io.Serializable; +import static com.google.common.base.Preconditions.checkArgument; + import java.util.List; import java.util.Map; import java.util.Set; -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; - -import com.google.common.collect.Iterables; -import com.sun.org.apache.xpath.internal.operations.Bool; import org.apache.brooklyn.api.entity.EntityInitializer; import org.apache.brooklyn.api.entity.EntitySpec; import org.apache.brooklyn.api.mgmt.ManagementContext; @@ -41,8 +35,7 @@ import org.apache.brooklyn.api.sensor.EnricherSpec; import org.apache.brooklyn.api.typereg.RegisteredType; import org.apache.brooklyn.camp.brooklyn.BrooklynCampReservedKeys; import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynYamlTypeInstantiator.InstantiatorFromKey; -import org.apache.brooklyn.camp.brooklyn.spi.dsl.DslAccessible; -import org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.BrooklynDslCommon; +import org.apache.brooklyn.core.entity.BrooklynConfigKeys; import org.apache.brooklyn.core.mgmt.BrooklynTags; import org.apache.brooklyn.core.objs.BasicSpecParameter; import org.apache.brooklyn.core.typereg.RegisteredTypeLoadingContexts; @@ -52,9 +45,11 @@ import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.core.task.DeferredSupplier; import org.apache.brooklyn.util.guava.Maybe; -import javax.annotation.Nullable; - -import static com.google.common.base.Preconditions.checkArgument; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; /** * Pattern for resolving "decorations" on service specs / entity specs, such as policies, enrichers, etc. @@ -254,6 +249,10 @@ public abstract class BrooklynEntityDecorationResolver<DT> { if (decorationAttributeJsonValue != null) { entitySpec.tagsAdd(decorationAttributeJsonValue); } + String iconUrl = attrs.get(BrooklynConfigKeys.ICON_URL); + if (iconUrl!=null) { + entitySpec.tagsAdd(MutableList.of(BrooklynTags.newIconUrlTag(iconUrl))); + } } @Override @@ -269,13 +268,15 @@ public abstract class BrooklynEntityDecorationResolver<DT> { } else if (!(brooklynTags instanceof List)) { throw new IllegalArgumentException(BrooklynCampReservedKeys.BROOKLYN_TAGS + " should be a List of String elements. You supplied " + brooklynTags); } else { - checkArgument(Iterables.all((List) brooklynTags, new Predicate() { + checkArgument(Iterables.all((List<?>) brooklynTags, new Predicate<Object>() { @Override public boolean apply(Object input) { return !(input instanceof DeferredSupplier); } }), BrooklynCampReservedKeys.BROOKLYN_TAGS + " should not contain DeferredSupplier. A DeferredSupplier is made when using $brooklyn:attributeWhenReady. You supplied " + brooklynTags); - return (List)brooklynTags; + @SuppressWarnings("unchecked") + List<Object> result = (List<Object>)brooklynTags; + return result; } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityMatcher.java ---------------------------------------------------------------------- diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityMatcher.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityMatcher.java index 091e760..3b6e04b 100644 --- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityMatcher.java +++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynEntityMatcher.java @@ -30,6 +30,7 @@ import org.apache.brooklyn.camp.spi.pdp.AssemblyTemplateConstructor; import org.apache.brooklyn.camp.spi.pdp.Service; import org.apache.brooklyn.camp.spi.resolve.PdpMatcher; import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog; +import org.apache.brooklyn.core.entity.BrooklynConfigKeys; import org.apache.brooklyn.core.mgmt.classloading.JavaBrooklynClassLoadingContext; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.exceptions.UserFacingException; @@ -113,6 +114,9 @@ public class BrooklynEntityMatcher implements PdpMatcher { Object locations = attrs.remove("locations"); if (locations!=null) builder.customAttribute("locations", locations); + Object iconUrl = attrs.remove(BrooklynConfigKeys.ICON_URL.getName()); + if (iconUrl!=null) + builder.customAttribute(BrooklynConfigKeys.ICON_URL.getName(), iconUrl); MutableMap<Object, Object> brooklynFlags = MutableMap.of(); Object origBrooklynFlags = attrs.remove(BrooklynCampReservedKeys.BROOKLYN_FLAGS); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java ---------------------------------------------------------------------- diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java index 9ec8fd8..f68ffad 100644 --- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java +++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/CampResolver.java @@ -116,9 +116,6 @@ class CampResolver { } spec.stackCatalogItemId(item.getId()); - if (!spec.getFlags().containsKey("iconUrl") && item.getIconUrl()!=null) { - spec.configure("iconUrl", item.getIconUrl()); - } if (spec instanceof EntitySpec) { String name = spec.getDisplayName(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java index c263e59..90697fe 100644 --- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java +++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemDo.java @@ -50,6 +50,11 @@ public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT>, BrooklynObj return itemDto; } + @Override + public ManagementContext getManagementContext() { + return catalog==null ? null : catalog.mgmt; + } + /** * @throws UnsupportedOperationException; Config not supported for catalog item. See {@link #getPlanYaml()}. */ http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java index bbc57ec..6c15afc 100644 --- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java +++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java @@ -30,7 +30,6 @@ import java.util.Set; import org.apache.brooklyn.api.effector.Effector; import org.apache.brooklyn.api.entity.Application; import org.apache.brooklyn.api.entity.Entity; -import org.apache.brooklyn.api.entity.EntityLocal; import org.apache.brooklyn.api.entity.EntitySpec; import org.apache.brooklyn.api.entity.EntityType; import org.apache.brooklyn.api.entity.Group; @@ -92,6 +91,7 @@ import org.apache.brooklyn.core.sensor.AttributeMap; import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey; import org.apache.brooklyn.core.sensor.BasicNotificationSensor; import org.apache.brooklyn.core.sensor.Sensors; +import org.apache.brooklyn.core.typereg.RegisteredTypes; import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.collections.MutableSet; @@ -222,7 +222,6 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E private Reference<List<Location>> locations = new BasicReference<List<Location>>(ImmutableList.<Location>of()); // dups removed in addLocations private Reference<Long> creationTimeUtc = new BasicReference<Long>(System.currentTimeMillis()); private Reference<String> displayName = new BasicReference<String>(); - private Reference<String> iconUrl = new BasicReference<String>(); private Collection<AbstractPolicy> policiesInternal = Lists.newCopyOnWriteArrayList(); private Collection<AbstractEnricher> enrichersInternal = Lists.newCopyOnWriteArrayList(); @@ -384,8 +383,9 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E displayNameAutoGenerated = true; } - if (flags.get("iconUrl") != null) { - iconUrl.set((String) flags.remove("iconUrl")); + if (flags.get(BrooklynConfigKeys.ICON_URL.getName()) != null) { + // shouldn't be used; CAMP parser leaves it as a top-level attribute which is converted to a tag + tags().addTag(BrooklynTags.newIconUrlTag((String) flags.remove(BrooklynConfigKeys.ICON_URL.getName()))); } // allow config keys, and fields, to be set from these flags if they have a SetFromFlag annotation @@ -514,7 +514,6 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E AttributeMap oldAttribs = attributesInternal; long oldCreationTimeUtc = creationTimeUtc.get(); String oldDisplayName = displayName.get(); - String oldIconUrl = iconUrl.get(); parent = managementContext.getStorage().getReference(getId()+"-parent"); groupsInternal = SetFromLiveMap.create(managementContext.getStorage().<Group,Boolean>getMap(getId()+"-groups")); @@ -522,7 +521,6 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E locations = managementContext.getStorage().getNonConcurrentList(getId()+"-locations"); creationTimeUtc = managementContext.getStorage().getReference(getId()+"-creationTime"); displayName = managementContext.getStorage().getReference(getId()+"-displayName"); - iconUrl = managementContext.getStorage().getReference(getId()+"-iconUrl"); // Only override stored defaults if we have actual values. We might be in setManagementContext // because we are reconstituting an existing entity in a new brooklyn management-node (in which @@ -540,7 +538,6 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E } else { displayNameAutoGenerated = false; } - if (iconUrl.isNull()) iconUrl.set(oldIconUrl); configsInternal = new EntityConfigMap(this, managementContext.getStorage().<ConfigKey<?>, Object>getMap(getId()+"-config")); if (!oldConfig.isEmpty()) { @@ -572,9 +569,9 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E return displayName.get(); } - @Override + @Override @Deprecated public String getIconUrl() { - return iconUrl.get(); + return RegisteredTypes.getIconUrl(this); } @Override http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java b/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java index 40baf65..0ae50d2 100644 --- a/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java +++ b/core/src/main/java/org/apache/brooklyn/core/entity/BrooklynConfigKeys.java @@ -246,6 +246,8 @@ public class BrooklynConfigKeys { .runtimeInheritance(BasicConfigInheritance.NOT_REINHERITED_ELSE_DEEP_MERGE) .build(); + public static final ConfigKey<String> ICON_URL = newStringConfigKey("iconUrl"); + private BrooklynConfigKeys() {} } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTags.java ---------------------------------------------------------------------- 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 7f8b0c8..c8248f1 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 @@ -38,6 +38,7 @@ public class BrooklynTags { public static final String YAML_SPEC_KIND = "yaml_spec"; public static final String NOTES_KIND = "notes"; public static final String OWNER_ENTITY_ID = "owner_entity_id"; + public static final String ICON_URL = "icon_url"; public static class NamedStringTag implements Serializable { private static final long serialVersionUID = 7932098757009051348L; @@ -134,6 +135,10 @@ public class BrooklynTags { return new NamedStringTag(OWNER_ENTITY_ID, ownerId); } + public static NamedStringTag newIconUrlTag(String iconUrl) { + return new NamedStringTag(ICON_URL, iconUrl); + } + public static TraitsTag newTraitsTag(List<Class<?>> interfaces) { return new TraitsTag(interfaces); } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/core/src/main/java/org/apache/brooklyn/core/objs/AbstractBrooklynObject.java ---------------------------------------------------------------------- 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 9ba5a61..3d7b552 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 @@ -170,6 +170,7 @@ public abstract class AbstractBrooklynObject implements BrooklynObjectInternal { this.managementContext = managementContext; } + @Override public ManagementContext getManagementContext() { return managementContext; } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java b/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java index 44ed3b8..6ad42f4 100644 --- a/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java +++ b/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java @@ -21,6 +21,7 @@ package org.apache.brooklyn.core.objs; import java.util.List; import java.util.Map; +import org.apache.brooklyn.api.mgmt.ManagementContext; import org.apache.brooklyn.api.mgmt.rebind.RebindSupport; import org.apache.brooklyn.api.mgmt.rebind.Rebindable; import org.apache.brooklyn.api.objs.BrooklynObject; @@ -51,6 +52,8 @@ public interface BrooklynObjectInternal extends BrooklynObject, Rebindable { @Override RebindSupport<?> getRebindSupport(); + ManagementContext getManagementContext(); + @Override ConfigurationSupportInternal config(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/core/src/main/java/org/apache/brooklyn/core/typereg/RegisteredTypes.java ---------------------------------------------------------------------- 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 cfc7ec4..b3886bd 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 @@ -31,6 +31,7 @@ import org.apache.brooklyn.api.catalog.CatalogItem; import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec; import org.apache.brooklyn.api.mgmt.ManagementContext; import org.apache.brooklyn.api.objs.BrooklynObject; +import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry; import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind; import org.apache.brooklyn.api.typereg.RegisteredType; import org.apache.brooklyn.api.typereg.RegisteredType.TypeImplementationPlan; @@ -38,6 +39,8 @@ import org.apache.brooklyn.api.typereg.RegisteredTypeLoadingContext; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.catalog.internal.CatalogUtils; import org.apache.brooklyn.core.config.ConfigKeys; +import org.apache.brooklyn.core.mgmt.BrooklynTags; +import org.apache.brooklyn.core.mgmt.BrooklynTags.NamedStringTag; import org.apache.brooklyn.core.objs.BrooklynObjectInternal; import org.apache.brooklyn.core.typereg.JavaClassNameTypePlanTransformer.JavaClassNameTypeImplementationPlan; import org.apache.brooklyn.util.exceptions.Exceptions; @@ -453,4 +456,18 @@ public class RegisteredTypes { return Maybe.of(object); } + public static String getIconUrl(BrooklynObject object) { + if (object==null) return null; + + NamedStringTag fromTag = BrooklynTags.findFirst(BrooklynTags.ICON_URL, object.tags().getTags()); + if (fromTag!=null) return fromTag.getContents(); + + ManagementContext mgmt = ((BrooklynObjectInternal)object).getManagementContext(); + if (mgmt==null) return null; + BrooklynTypeRegistry registry = mgmt.getTypeRegistry(); + if (registry==null) return null; + RegisteredType item = registry.get( object.getCatalogItemId() ); + if (item==null) return null; + return item.getIconUrl(); + } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java index 4aec34b..5d8dfb6 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/ApplicationResource.java @@ -107,7 +107,7 @@ public class ApplicationResource extends AbstractBrooklynRestResource implements Lifecycle serviceState = entity.getAttribute(Attributes.SERVICE_STATE_ACTUAL); - String iconUrl = entity.getIconUrl(); + String iconUrl = RegisteredTypes.getIconUrl(entity); if (iconUrl!=null) { if (brooklyn().isUrlServerSideAndSafe(iconUrl)) // route to server if it is a server-side url http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java index efc8838..e914d1e 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java @@ -155,7 +155,7 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti @Override public Response getIcon(String applicationId, String entityId) { Entity entity = brooklyn().getEntity(applicationId, entityId); - String url = entity.getIconUrl(); + String url = RegisteredTypes.getIconUrl(entity); if (url == null) return Response.status(Status.NO_CONTENT).build(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/40fdfaf2/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java index 6645c5c..d9eb7ee 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java @@ -65,9 +65,9 @@ import org.apache.brooklyn.rest.domain.ApplicationSpec; import org.apache.brooklyn.rest.domain.EntitySpec; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.collections.MutableSet; -import org.apache.brooklyn.util.core.flags.TypeCoercions; import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.javalang.Reflections; +import org.apache.brooklyn.util.javalang.coerce.PrimitiveStringTypeCoercions; import org.apache.brooklyn.util.net.Urls; import org.apache.brooklyn.util.text.Strings; import org.slf4j.Logger; @@ -552,7 +552,7 @@ public class BrooklynRestResourceUtils { } } - if (TypeCoercions.isPrimitiveOrBoxer(value.getClass())) return value; + if (PrimitiveStringTypeCoercions.isPrimitiveOrBoxer(value.getClass())) return value; return value.toString(); }
