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 d610116a99f884bb03889395eb430599b20e6826 Author: Alex Heneveld <alex.henev...@cloudsoftcorp.com> AuthorDate: Wed Jul 14 14:44:15 2021 +0100 better fix for raw compatibility --- .../apache/brooklyn/core/mgmt/ha/OsgiManager.java | 2 +- .../resources/AbstractBrooklynRestResource.java | 22 +++++++++++---- .../rest/resources/EntityConfigResource.java | 33 +++++++++++----------- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java index a909635..85418e9 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java @@ -272,7 +272,7 @@ public class OsgiManager { } catch (Exception e) { throw Exceptions.propagate(e); } finally { - if (reuseFramework) { + if (reuseFramework && framework!=null) { bundlesAtStartup = MutableSet.copyOf(Arrays.asList(framework.getBundleContext().getBundles())); } } diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java index 7da1216..c9e4172 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AbstractBrooklynRestResource.java @@ -113,6 +113,7 @@ public abstract class AbstractBrooklynRestResource { private @Nullable Object rendererHintSource; private @Nullable Boolean immediately; + private @Nullable Boolean raw; private @Nullable Boolean useDisplayHints; private @Nullable Boolean skipResolution; private @Nullable Boolean suppressBecauseSecret; @@ -141,17 +142,26 @@ public abstract class AbstractBrooklynRestResource { @Deprecated // since 1.0 public RestValueResolver raw(Boolean raw) { - if (raw) { - // raw overrides useDisplayHints in this case to ensure backwards compatibility - // raw will never be null, defaults to false and according to tests we want hints when raw is false - useDisplayHints(false); - } + this.raw = raw; return this; } public RestValueResolver useDisplayHints(Boolean useDisplayHints) { this.useDisplayHints = useDisplayHints; return this; } + private boolean isUseDisplayHints() { + if (raw!=null) { + if (raw) { + // explicit non-default value takes precedence + // (REST API will not allow 'null') + return !raw; + } + // otherwise pass through + } + + if (useDisplayHints!=null) return useDisplayHints; + return true; + } public RestValueResolver skipResolution(Boolean skipResolution) { this.skipResolution = skipResolution; return this; @@ -177,7 +187,7 @@ public abstract class AbstractBrooklynRestResource { ? valueToResolve : getImmediateValue(valueToResolve, entity, immediately, timeout); if (valueResult==UNRESOLVED) valueResult = valueToResolve; - if (rendererHintSource!=null && !Boolean.FALSE.equals(useDisplayHints)) { + if (rendererHintSource!=null && isUseDisplayHints()) { valueResult = RendererHints.applyDisplayValueHintUnchecked(rendererHintSource, valueResult); } if (Boolean.TRUE.equals(suppressBecauseSecret)) { diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java index c9c3359..b242715 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java @@ -84,7 +84,9 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement // TODO support parameters ?show=value,summary&name=xxx &format={string,json,xml} // (and in sensors class) @Override - public Map<String, Object> batchConfigRead(String application, String entityToken, Boolean useDisplayHints, Boolean skipResolution, Boolean suppressSecrets, @Deprecated Boolean raw) { + public Map<String, Object> batchConfigRead(String application, String entityToken, + Boolean useDisplayHints, Boolean skipResolution, Boolean suppressSecrets, + Boolean raw) { // TODO: add test Entity entity = brooklyn().getEntity(application, entityToken); if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.SEE_ENTITY, entity)) { @@ -95,26 +97,25 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement // wrap in a task for better runtime view return Entities.submit(entity, Tasks.<Map<String,Object>>builder().displayName("REST API batch config read") .tag(BrooklynTaskTags.TRANSIENT_TASK_TAG) - .body(new BatchConfigRead(mgmt(), this, entity,useDisplayHints, skipResolution, suppressSecrets, raw)).build()).getUnchecked(); + .body(new BatchConfigRead(mgmt(), this, entity, useDisplayHints, skipResolution, suppressSecrets, raw)).build()).getUnchecked(); } private static class BatchConfigRead implements Callable<Map<String,Object>> { private final ManagementContext mgmt; private final EntityConfigResource resource; private final Entity entity; - private final Boolean raw; - private final Boolean useDisplayHints; - private final Boolean skipResolution; - private final Boolean suppressSecrets; + private final Boolean useDisplayHints, skipResolution, suppressSecrets, raw; - public BatchConfigRead(ManagementContext mgmt, EntityConfigResource resource, Entity entity, Boolean useDisplayHints, Boolean skipResolution, Boolean suppressSecrets, @Deprecated Boolean raw) { + public BatchConfigRead(ManagementContext mgmt, EntityConfigResource resource, Entity entity, + Boolean useDisplayHints, Boolean skipResolution, Boolean suppressSecrets, + @Deprecated Boolean raw) { this.mgmt = mgmt; this.resource = resource; this.entity = entity; - this.raw = raw; this.useDisplayHints = useDisplayHints; this.skipResolution = skipResolution; this.suppressSecrets = suppressSecrets; + this.raw = raw; } @Override @@ -132,14 +133,14 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement new Object[] {Entitlements.getEntitlementContext().user(), ek.getKey().getName(), entity}); continue; } - result.put(key.getName(), - resource.resolving(value).preferJson(true).asJerseyOutermostReturnValue(true) - .raw(raw) - .useDisplayHints(useDisplayHints) - .skipResolution(skipResolution) - .suppressIfSecret(key.getName(), suppressSecrets) - .context(entity).immediately(true).renderAs(key).resolve()); + resource.resolving(value, mgmt).preferJson(true).asJerseyOutermostReturnValue(false) + .useDisplayHints(useDisplayHints) + .skipResolution(skipResolution) + .suppressIfSecret(key.getName(), suppressSecrets) + .raw(raw) + .context(entity).timeout(Duration.ZERO).renderAs(key) + .resolve()); } return result; @@ -181,10 +182,10 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement Object value = ((EntityInternal)entity).config().getRaw(ck).orNull(); return resolving(value).preferJson(preferJson).asJerseyOutermostReturnValue(true) - .raw(raw) .useDisplayHints(useDisplayHints) .skipResolution(skipResolution) .suppressIfSecret(ck.getName(), suppressSecrets) + .raw(raw) .context(entity).immediately(true).renderAs(ck).resolve(); }