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();
     }
 

Reply via email to