Author: lquack
Date: Wed May  4 12:24:59 2016
New Revision: 1742259

URL: http://svn.apache.org/viewvc?rev=1742259&view=rev
Log:
QPID-7211: [Java Broker] Introduce request parameter to not transfer context 
variables

merged from trunk with command:
svn merge -c 1742257 ^/qpid/java/trunk

Modified:
    qpid/java/branches/6.0.x/   (props changed)
    qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml
    
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
    
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
    
qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java

Propchange: qpid/java/branches/6.0.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed May  4 12:24:59 2016
@@ -9,5 +9,5 @@
 /qpid/branches/java-broker-vhost-refactor/java:1493674-1494547
 /qpid/branches/java-network-refactor/qpid/java:805429-821809
 /qpid/branches/qpid-2935/qpid/java:1061302-1072333
-/qpid/java/trunk:1715445-1715447,1715586,1715940,1716086-1716087,1716127-1716128,1716141,1716153,1716155,1716194,1716204,1716209,1716227,1716277,1716357,1716368,1716370,1716374,1716432,1716444-1716445,1716455,1716461,1716474,1716489,1716497,1716515,1716555,1716602,1716606-1716610,1716619,1716636,1717269,1717299,1717401,1717446,1717449,1717626,1717691,1717735,1717780,1718744,1718889,1718893,1718918,1718922,1719026,1719028,1719033,1719037,1719047,1719051,1720340,1720664,1721151,1721198,1722019-1722020,1722246,1722339,1722416,1722674,1722678,1722683,1722711,1723064,1723194,1723563,1724216,1724251,1724257,1724292,1724375,1724397,1724432,1724582,1724603,1724780,1724843-1724844,1725295,1725569,1725760,1726176,1726244-1726246,1726249,1726358,1726436,1726449,1726456,1726646,1726653,1726755,1726778,1727532,1727555,1727608,1727951,1727954,1728089,1728167,1728302,1728497,1728501,1728524,1728639,1728651,1728772,1729215,1729297,1729347,1729356,1729406,1729408,1729412,1729515,1729638,1729656-1729
 
657,1729783,1729828,1729832,1729841,1729851,1729886,1729904,1729973,1730019,1730025,1730052,1730072,1730088,1730494,1730499,1730547,1730559,1730567,1730578,1730585,1730651,1730697,1730712-1730713,1730805,1731029,1731110,1731210,1731225,1731444,1731551,1731612,1732184,1732452,1732461,1732525,1732812,1734452,1736478,1736751,1736838,1737804,1737835,1737853,1737984,1737992,1738119,1738135,1738231,1738271,1738607,1738610,1738731,1738914,1741702
+/qpid/java/trunk:1715445-1715447,1715586,1715940,1716086-1716087,1716127-1716128,1716141,1716153,1716155,1716194,1716204,1716209,1716227,1716277,1716357,1716368,1716370,1716374,1716432,1716444-1716445,1716455,1716461,1716474,1716489,1716497,1716515,1716555,1716602,1716606-1716610,1716619,1716636,1717269,1717299,1717401,1717446,1717449,1717626,1717691,1717735,1717780,1718744,1718889,1718893,1718918,1718922,1719026,1719028,1719033,1719037,1719047,1719051,1720340,1720664,1721151,1721198,1722019-1722020,1722246,1722339,1722416,1722674,1722678,1722683,1722711,1723064,1723194,1723563,1724216,1724251,1724257,1724292,1724375,1724397,1724432,1724582,1724603,1724780,1724843-1724844,1725295,1725569,1725760,1726176,1726244-1726246,1726249,1726358,1726436,1726449,1726456,1726646,1726653,1726755,1726778,1727532,1727555,1727608,1727951,1727954,1728089,1728167,1728302,1728497,1728501,1728524,1728639,1728651,1728772,1729215,1729297,1729347,1729356,1729406,1729408,1729412,1729515,1729638,1729656-1729
 
657,1729783,1729828,1729832,1729841,1729851,1729886,1729904,1729973,1730019,1730025,1730052,1730072,1730088,1730494,1730499,1730547,1730559,1730567,1730578,1730585,1730651,1730697,1730712-1730713,1730805,1731029,1731110,1731210,1731225,1731444,1731551,1731612,1732184,1732452,1732461,1732525,1732812,1734452,1736478,1736751,1736838,1737804,1737835,1737853,1737984,1737992,1738119,1738135,1738231,1738271,1738607,1738610,1738731,1738914,1741702,1742257
 /qpid/trunk/qpid:796646-796653

Modified: qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml
URL: 
http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml?rev=1742259&r1=1742258&r2=1742259&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml (original)
+++ qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml Wed May  4 
12:24:59 2016
@@ -99,6 +99,14 @@
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.qpid</groupId>
+      <artifactId>qpid-broker-core</artifactId>
+      <version>${project.version}</version>
+      <classifier>tests</classifier>
+      <scope>test</scope>
+    </dependency>
+
   </dependencies>
 
   <build>

Modified: 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
URL: 
http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java?rev=1742259&r1=1742258&r2=1742259&view=diff
==============================================================================
--- 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
 (original)
+++ 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
 Wed May  4 12:24:59 2016
@@ -52,28 +52,20 @@ public class ConfiguredObjectToMapConver
 
     public Map<String, Object> convertObjectToMap(final ConfiguredObject<?> 
confObject,
                                                   Class<? extends 
ConfiguredObject> clazz,
-                                                  int depth,
-                                                  final boolean 
useActualValues,
-                                                  final boolean 
inheritedActuals,
-                                                  final boolean 
includeSystemContext,
-                                                  final boolean 
extractAsConfig,
-                                                  final int oversizeThreshold,
-                                                  final boolean 
isSecureTransport
+                                                  ConverterOptions 
converterOptions
                                                  )
     {
         Map<String, Object> object = new LinkedHashMap<>();
 
-        incorporateAttributesIntoMap(confObject, object, useActualValues, 
inheritedActuals, includeSystemContext,
-                                     extractAsConfig, oversizeThreshold, 
isSecureTransport);
-        if(!extractAsConfig)
+        incorporateAttributesIntoMap(confObject, object, converterOptions);
+        if(!converterOptions.isExtractAsConfig())
         {
             incorporateStatisticsIntoMap(confObject, object);
         }
 
-        if(depth > 0)
+        if(converterOptions.getDepth() > 0)
         {
-            incorporateChildrenIntoMap(confObject, clazz, depth, object, 
useActualValues, inheritedActuals,
-                                       includeSystemContext, extractAsConfig, 
oversizeThreshold, isSecureTransport);
+            incorporateChildrenIntoMap(confObject, clazz, object, 
converterOptions);
         }
         return object;
     }
@@ -82,15 +74,10 @@ public class ConfiguredObjectToMapConver
     private void incorporateAttributesIntoMap(
             final ConfiguredObject<?> confObject,
             Map<String, Object> object,
-            final boolean useActualValues,
-            final boolean inheritedActuals,
-            final boolean includeSystemContext,
-            final boolean extractAsConfig,
-            final int oversizeThreshold,
-            final boolean isSecureTransport)
+            ConverterOptions converterOptions)
     {
         // if extracting as config add a fake attribute for each secondary 
parent
-        if(extractAsConfig && 
confObject.getModel().getParentTypes(confObject.getCategoryClass()).size()>1)
+        if(converterOptions.isExtractAsConfig() && 
confObject.getModel().getParentTypes(confObject.getCategoryClass()).size()>1)
         {
             Iterator<Class<? extends ConfiguredObject>> parentClasses =
                     
confObject.getModel().getParentTypes(confObject.getCategoryClass()).iterator();
@@ -112,10 +99,10 @@ public class ConfiguredObjectToMapConver
 
         for(String name : confObject.getAttributeNames())
         {
-            if (!(extractAsConfig && 
CONFIG_EXCLUDED_ATTRIBUTES.contains(name)))
+            if (!(converterOptions.isExtractAsConfig() && 
CONFIG_EXCLUDED_ATTRIBUTES.contains(name)))
             {
                 Object value =
-                        useActualValues ? 
confObject.getActualAttributes().get(name) : confObject.getAttribute(name);
+                        converterOptions.isUseActualValues() ? 
confObject.getActualAttributes().get(name) : confObject.getAttribute(name);
                 if (value instanceof ConfiguredObject)
                 {
                     object.put(name, ((ConfiguredObject) value).getName());
@@ -123,17 +110,14 @@ public class ConfiguredObjectToMapConver
                 else if (ConfiguredObject.CONTEXT.equals(name))
                 {
                     Map<String, Object> contextValues = new HashMap<>();
-                    if (useActualValues)
+                    if (!converterOptions.isExcludeInheritedContext())
                     {
-                        collectContext(contextValues, confObject.getModel(), 
confObject, inheritedActuals);
-                    }
-                    else
-                    {
-                        for (String contextName : 
confObject.getContextKeys(!includeSystemContext))
-                        {
-                            contextValues.put(contextName, 
confObject.getContextValue(String.class, contextName));
-                        }
+                        
contextValues.putAll(confObject.getModel().getTypeRegistry().getDefaultContext());
+                        contextValues.putAll(System.getenv());
+                        contextValues.putAll((Map) System.getProperties());
                     }
+                    collectContext(contextValues, confObject, 
converterOptions);
+
                     if (!contextValues.isEmpty())
                     {
                         object.put(ConfiguredObject.CONTEXT, contextValues);
@@ -162,21 +146,21 @@ public class ConfiguredObjectToMapConver
                             .getAttributeTypes(confObject.getClass())
                             .get(name);
 
-                    if (attribute.isSecureValue(value) && !(isSecureTransport 
&& extractAsConfig))
+                    if (attribute.isSecureValue(value) && 
!(converterOptions.isSecureTransport() && converterOptions.isExtractAsConfig()))
                     {
                         // do not expose actual secure attribute value
                         // getAttribute() returns encoded value
                         value =  confObject.getAttribute(name);
                     }
 
-                    if(attribute.isOversized() && !extractAsConfig && 
!useActualValues)
+                    if(attribute.isOversized() && 
!converterOptions.isExtractAsConfig() && !converterOptions.isUseActualValues())
                     {
                         String valueString = String.valueOf(value);
-                        if(valueString.length() > oversizeThreshold)
+                        if(valueString.length() > 
converterOptions.getOversizeThreshold())
                         {
 
                             String replacementValue = 
"".equals(attribute.getOversizedAltText())
-                                    ? String.valueOf(value).substring(0, 
oversizeThreshold - 4) + "..."
+                                    ? String.valueOf(value).substring(0, 
converterOptions.getOversizeThreshold() - 4) + "..."
                                     : attribute.getOversizedAltText();
 
                             object.put(name, replacementValue);
@@ -191,7 +175,7 @@ public class ConfiguredObjectToMapConver
                         object.put(name, value);
                     }
                 }
-                else if (extractAsConfig)
+                else if (converterOptions.isExtractAsConfig())
                 {
                     ConfiguredObjectAttribute<?, ?> attribute = 
confObject.getModel()
                             .getTypeRegistry()
@@ -207,10 +191,11 @@ public class ConfiguredObjectToMapConver
         }
     }
 
-    private void collectContext(Map<String, Object> contextValues, Model 
model, ConfiguredObject<?> confObject, boolean inheritedContext)
+    private void collectContext(Map<String, Object> contextValues, 
ConfiguredObject<?> confObject, ConverterOptions options)
     {
+        Model model = confObject.getModel();
         Object value = 
confObject.getActualAttributes().get(ConfiguredObject.CONTEXT);
-        if (inheritedContext)
+        if (!options.isExcludeInheritedContext())
         {
             Collection<Class<? extends ConfiguredObject>> parents = 
model.getParentTypes(confObject.getCategoryClass());
             if(parents != null && !parents.isEmpty())
@@ -218,13 +203,23 @@ public class ConfiguredObjectToMapConver
                 ConfiguredObject parent = 
confObject.getParent(parents.iterator().next());
                 if(parent != null)
                 {
-                    collectContext(contextValues, model, parent, 
inheritedContext);
+                    collectContext(contextValues, parent, options);
                 }
             }
         }
         if (value instanceof Map)
         {
-            contextValues.putAll((Map<String,String>)value);
+            if (options.isUseActualValues())
+            {
+                contextValues.putAll((Map<String,String>)value);
+            }
+            else
+            {
+                for (String contextKey : ((Map<String,String>)value).keySet())
+                {
+                    contextValues.put(contextKey, 
confObject.getContextValue(String.class, contextKey));
+                }
+            }
         }
     }
 
@@ -244,14 +239,8 @@ public class ConfiguredObjectToMapConver
     private void incorporateChildrenIntoMap(
             final ConfiguredObject confObject,
             Class<? extends ConfiguredObject> clazz,
-            int depth,
             Map<String, Object> object,
-            final boolean useActualValues,
-            final boolean inheritedActuals,
-            final boolean includeSystemContext,
-            final boolean extractAsConfig,
-            final int oversizeThreshold,
-            final boolean isSecure)
+            ConverterOptions converterOptions)
     {
         List<Class<? extends ConfiguredObject>> childTypes = new 
ArrayList<>(confObject.getModel().getChildTypes(clazz));
 
@@ -263,9 +252,11 @@ public class ConfiguredObjectToMapConver
                 return o1.getSimpleName().compareTo(o2.getSimpleName());
             }
         });
+
+        ConverterOptions childConverterOptions = new 
ConverterOptions(converterOptions, converterOptions.getDepth() - 1);
         for(Class<? extends ConfiguredObject> childClass : childTypes)
         {
-            if(!(extractAsConfig && 
confObject.getModel().getParentTypes(childClass).iterator().next() != 
confObject.getCategoryClass()))
+            if(!(converterOptions.isExtractAsConfig() && 
confObject.getModel().getParentTypes(childClass).iterator().next() != 
confObject.getCategoryClass()))
             {
 
                 Collection children = confObject.getChildren(childClass);
@@ -283,19 +274,14 @@ public class ConfiguredObjectToMapConver
 
                     List<Map<String, Object>> childObjects = new ArrayList<>();
 
+
                     for (ConfiguredObject child : sortedChildren)
                     {
-                        if (!(extractAsConfig && !child.isDurable()))
+                        if (!(converterOptions.isExtractAsConfig() && 
!child.isDurable()))
                         {
                             childObjects.add(convertObjectToMap(child,
                                                                 childClass,
-                                                                depth - 1,
-                                                                
useActualValues,
-                                                                
inheritedActuals,
-                                                                
includeSystemContext,
-                                                                
extractAsConfig,
-                                                                
oversizeThreshold,
-                                                                isSecure));
+                                                                
childConverterOptions));
                         }
                     }
 
@@ -310,5 +296,68 @@ public class ConfiguredObjectToMapConver
     }
 
 
+    public static final class ConverterOptions
+    {
+        private final int _depth;
+        private final boolean _useActualValues;
+        private final boolean _extractAsConfig;
+        private final int _oversizeThreshold;
+        private final boolean _secureTransport;
+        private final boolean _excludeInheritedContext;
+
+        public ConverterOptions(ConverterOptions options, int depth)
+        {
+            this(depth,
+                 options.isUseActualValues(),
+                 options.isExtractAsConfig(),
+                 options.getOversizeThreshold(),
+                 options.isSecureTransport(),
+                 options.isExcludeInheritedContext());
+        }
 
+        public ConverterOptions(final int depth,
+                                final boolean useActualValues,
+                                final boolean extractAsConfig,
+                                final int oversizeThreshold,
+                                final boolean secureTransport,
+                                final boolean excludeInheritedContext)
+        {
+            _depth = depth;
+            _useActualValues = useActualValues;
+            _extractAsConfig = extractAsConfig;
+            _oversizeThreshold = oversizeThreshold;
+            _secureTransport = secureTransport;
+            _excludeInheritedContext = excludeInheritedContext;
+        }
+
+        public int getDepth()
+        {
+            return _depth;
+        }
+
+        public boolean isUseActualValues()
+        {
+            return _useActualValues;
+        }
+
+        public boolean isExtractAsConfig()
+        {
+            return _extractAsConfig;
+        }
+
+        public int getOversizeThreshold()
+        {
+            return _oversizeThreshold;
+        }
+
+        public boolean isSecureTransport()
+        {
+            return _secureTransport;
+        }
+
+        public boolean isExcludeInheritedContext()
+        {
+            return _excludeInheritedContext;
+        }
+    }
 }

Modified: 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
URL: 
http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1742259&r1=1742258&r2=1742259&view=diff
==============================================================================
--- 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
 (original)
+++ 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
 Wed May  4 12:24:59 2016
@@ -51,12 +51,12 @@ import org.apache.qpid.server.model.Abst
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectOperation;
+import org.apache.qpid.server.model.Content;
 import org.apache.qpid.server.model.IllegalStateTransitionException;
 import org.apache.qpid.server.model.IntegrityViolationException;
-import org.apache.qpid.server.model.Content;
 import org.apache.qpid.server.model.Model;
-import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
+import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
 import org.apache.qpid.util.DataUrlUtils;
 
 public class RestServlet extends AbstractServlet
@@ -74,6 +74,7 @@ public class RestServlet extends Abstrac
     public static final String INCLUDE_SYS_CONTEXT_PARAM = "includeSysContext";
     public static final String INHERITED_ACTUALS_PARAM = "inheritedActuals";
     public static final String EXTRACT_INITIAL_CONFIG_PARAM = 
"extractInitialConfig";
+    public static final String EXCLUDE_INHERITED_CONTEXT_PARAM = 
"excludeInheritedContext";
     public static final int SC_UNPROCESSABLE_ENTITY = 422;
 
     /**
@@ -81,7 +82,6 @@ public class RestServlet extends Abstrac
      * response with the value attachment.  This filename will be derived from 
the parameter value.
      */
     public static final String CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM = 
"contentDispositionAttachmentFilename";
-
     public static final Set<String> RESERVED_PARAMS =
             new HashSet<>(Arrays.asList(DEPTH_PARAM,
                                         SORT_PARAM,
@@ -90,7 +90,8 @@ public class RestServlet extends Abstrac
                                         INCLUDE_SYS_CONTEXT_PARAM,
                                         EXTRACT_INITIAL_CONFIG_PARAM,
                                         INHERITED_ACTUALS_PARAM,
-                                        
CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM));
+                                        
CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM,
+                                        EXCLUDE_INHERITED_CONTEXT_PARAM));
     public static final int DEFAULT_DEPTH = 1;
     public static final int DEFAULT_OVERSIZE = 120;
 
@@ -379,25 +380,82 @@ public class RestServlet extends Abstrac
 
                 int depth;
                 boolean actuals;
-                boolean includeSystemContext;
-                boolean inheritedActuals;
                 int oversizeThreshold;
+                boolean excludeInheritedContext;
 
                 if (extractInitialConfig)
                 {
                     depth = Integer.MAX_VALUE;
                     oversizeThreshold = Integer.MAX_VALUE;
                     actuals = true;
-                    includeSystemContext = false;
-                    inheritedActuals = false;
+                    excludeInheritedContext = true;
                 }
                 else
                 {
                     depth = getIntParameterFromRequest(request, DEPTH_PARAM, 
DEFAULT_DEPTH);
                     oversizeThreshold = getIntParameterFromRequest(request, 
OVERSIZE_PARAM, DEFAULT_OVERSIZE);
                     actuals = getBooleanParameterFromRequest(request, 
ACTUALS_PARAM);
-                    includeSystemContext = 
getBooleanParameterFromRequest(request, INCLUDE_SYS_CONTEXT_PARAM);
-                    inheritedActuals = getBooleanParameterFromRequest(request, 
INHERITED_ACTUALS_PARAM);
+                    String includeSystemContextParameter = 
request.getParameter(INCLUDE_SYS_CONTEXT_PARAM);
+                    String inheritedActualsParameter = 
request.getParameter(INHERITED_ACTUALS_PARAM);
+                    String excludeInheritedContextParameter = 
request.getParameter(EXCLUDE_INHERITED_CONTEXT_PARAM);
+
+                    if (excludeInheritedContextParameter == null)
+                    {
+                        /* backward (pre v6.1) compatible behaviour */
+                        if (inheritedActualsParameter == null && 
includeSystemContextParameter == null)
+                        {
+                            excludeInheritedContext = actuals;
+                        }
+                        else if (inheritedActualsParameter != null && 
includeSystemContextParameter != null)
+                        {
+                            if (actuals)
+                            {
+                                excludeInheritedContext = 
!Boolean.parseBoolean(inheritedActualsParameter);
+                            }
+                            else
+                            {
+                                excludeInheritedContext = 
!Boolean.parseBoolean(includeSystemContextParameter);
+                            }
+                        }
+                        else if (inheritedActualsParameter != null)
+                        {
+                            if (actuals)
+                            {
+                                excludeInheritedContext = 
!Boolean.parseBoolean(inheritedActualsParameter);
+                            }
+                            else
+                            {
+                                excludeInheritedContext = false;
+                            }
+                        }
+                        else
+                        {
+                            if (actuals)
+                            {
+                                excludeInheritedContext = true;
+                            }
+                            else
+                            {
+                                excludeInheritedContext = 
!Boolean.parseBoolean(includeSystemContextParameter);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        if (inheritedActualsParameter != null || 
includeSystemContextParameter != null)
+                        {
+                            sendJsonErrorResponse(request,
+                                                  response,
+                                                  SC_UNPROCESSABLE_ENTITY,
+                                                  String.format(
+                                                          "Parameter '%s' 
cannot be specified together with '%s' or '%s'",
+                                                          
EXCLUDE_INHERITED_CONTEXT_PARAM,
+                                                          
INHERITED_ACTUALS_PARAM,
+                                                          
INCLUDE_SYS_CONTEXT_PARAM));
+                            return;
+                        }
+                        excludeInheritedContext = 
Boolean.parseBoolean(excludeInheritedContextParameter);
+                    }
                 }
 
                 List<Map<String, Object>> output = new ArrayList<>();
@@ -405,7 +463,13 @@ public class RestServlet extends Abstrac
                 {
 
                     
output.add(_objectConverter.convertObjectToMap(configuredObject, 
getConfiguredClass(),
-                            depth, actuals, inheritedActuals, 
includeSystemContext, extractInitialConfig, oversizeThreshold, 
request.isSecure()));
+                                                                   new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                           
depth,
+                                                                           
actuals,
+                                                                           
extractInitialConfig,
+                                                                           
oversizeThreshold,
+                                                                           
request.isSecure(),
+                                                                           
excludeInheritedContext)));
                 }
 
 
@@ -640,10 +704,18 @@ public class RestServlet extends Abstrac
         }
         else
         {
+            final ConfiguredObjectToMapConverter.ConverterOptions 
converterOptions =
+                    new 
ConfiguredObjectToMapConverter.ConverterOptions(DEFAULT_DEPTH,
+                                                                        false,
+                                                                        false,
+                                                                        
DEFAULT_OVERSIZE,
+                                                                        
request.isSecure(),
+                                                                        true);
             if 
(ConfiguredObject.class.isAssignableFrom(operation.getReturnType()))
             {
-                returnVal = 
_objectConverter.convertObjectToMap((ConfiguredObject<?>) returnVal, 
operation.getReturnType(), DEFAULT_DEPTH,
-                                                                false, false, 
false, false, DEFAULT_OVERSIZE, request.isSecure());
+                returnVal = 
_objectConverter.convertObjectToMap((ConfiguredObject<?>) returnVal,
+                                                                
operation.getReturnType(),
+                                                                
converterOptions);
             }
             else if (returnsCollectionOfConfiguredObjects(operation))
             {
@@ -651,8 +723,8 @@ public class RestServlet extends Abstrac
                 for (Object configuredObject : (Collection)returnVal)
                 {
                     
output.add(_objectConverter.convertObjectToMap((ConfiguredObject<?>) 
configuredObject,
-                               getCollectionMemberType((ParameterizedType) 
operation.getGenericReturnType()),
-                               DEFAULT_DEPTH, false, false, false, false, 
DEFAULT_OVERSIZE, request.isSecure()));
+                                                                   
getCollectionMemberType((ParameterizedType) operation.getGenericReturnType()),
+                                                                   
converterOptions));
                 }
                 returnVal = output;
             }
@@ -1013,7 +1085,16 @@ public class RestServlet extends Abstrac
 
     private boolean getBooleanParameterFromRequest(HttpServletRequest request, 
final String paramName)
     {
-        return Boolean.parseBoolean(request.getParameter(paramName));
+        return getBooleanParameterFromRequest(request, paramName, false);
     }
 
+    private boolean getBooleanParameterFromRequest(HttpServletRequest request, 
final String paramName, final boolean defaultValue)
+    {
+        String value = request.getParameter(paramName);
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        return Boolean.parseBoolean(value);
+    }
 }

Modified: 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java?rev=1742259&r1=1742258&r2=1742259&view=diff
==============================================================================
--- 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java
 (original)
+++ 
qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java
 Wed May  4 12:24:59 2016
@@ -41,6 +41,9 @@ import org.apache.qpid.server.model.Conf
 import org.apache.qpid.server.model.ConfiguredObjectMethodAttribute;
 import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry;
 import org.apache.qpid.server.model.Model;
+import org.apache.qpid.server.model.testmodels.hierarchy.TestCar;
+import org.apache.qpid.server.model.testmodels.hierarchy.TestElecEngineImpl;
+import org.apache.qpid.server.model.testmodels.hierarchy.TestEngine;
 import org.apache.qpid.test.utils.QpidTestCase;
 
 public class ConfiguredObjectToMapConverterTest extends QpidTestCase
@@ -63,13 +66,13 @@ public class ConfiguredObjectToMapConver
 
         Map<String, Object> resultMap = 
_converter.convertObjectToMap(_configuredObject,
                                                                       
ConfiguredObject.class,
-                                                                      0,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      120,
-                                                                      false);
+                                                                      new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                              
0,
+                                                                              
false,
+                                                                              
false,
+                                                                              
120,
+                                                                              
false,
+                                                                              
false));
         Map<String, Object> statsAsMap = (Map<String, Object>) 
resultMap.get(STATISTICS_MAP_KEY);
         assertNotNull("Statistics should be part of map", statsAsMap);
         assertEquals("Unexpected number of statistics", 1, statsAsMap.size());
@@ -86,13 +89,13 @@ public class ConfiguredObjectToMapConver
 
         Map<String, Object> resultMap = 
_converter.convertObjectToMap(_configuredObject,
                                                                       
ConfiguredObject.class,
-                                                                      0,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      120,
-                                                                      false);
+                                                                      new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                              
0,
+                                                                              
false,
+                                                                              
false,
+                                                                              
120,
+                                                                              
false,
+                                                                              
false));
         assertEquals("Unexpected number of attributes", 1, resultMap.size());
         assertEquals("Unexpected attribute value", attributeValue, 
resultMap.get(attributeName));
     }
@@ -111,13 +114,13 @@ public class ConfiguredObjectToMapConver
 
         Map<String, Object> resultMap = 
_converter.convertObjectToMap(_configuredObject,
                                                                       
ConfiguredObject.class,
-                                                                      0,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      120,
-                                                                      false);
+                                                                      new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                              
0,
+                                                                              
false,
+                                                                              
false,
+                                                                              
120,
+                                                                              
false,
+                                                                              
false));
         assertEquals("Unexpected number of attributes", 1, resultMap.size());
         assertEquals("Unexpected attribute value", 
"attributeConfiguredObjectName", resultMap.get(attributeName));
     }
@@ -137,13 +140,13 @@ public class ConfiguredObjectToMapConver
 
         Map<String, Object> resultMap = 
_converter.convertObjectToMap(_configuredObject,
                                                                       
ConfiguredObject.class,
-                                                                      1,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      120,
-                                                                      false);
+                                                                      new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                              
1,
+                                                                              
false,
+                                                                              
false,
+                                                                              
120,
+                                                                              
false,
+                                                                              
false));
         assertEquals("Unexpected parent map size", 1, resultMap.size());
 
         final List<Map<String, Object>> childList = (List<Map<String, 
Object>>) resultMap.get("testchilds");
@@ -182,13 +185,13 @@ public class ConfiguredObjectToMapConver
 
         Map<String, Object> resultMap = 
_converter.convertObjectToMap(_configuredObject,
                                                                       
ConfiguredObject.class,
-                                                                      1,
-                                                                      true,
-                                                                      false,
-                                                                      false,
-                                                                      false,
-                                                                      120,
-                                                                      false);
+                                                                      new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                              
1,
+                                                                              
true,
+                                                                              
false,
+                                                                              
120,
+                                                                              
false,
+                                                                              
true));
         assertEquals("Unexpected parent map size", 2, resultMap.size());
         assertEquals("Incorrect context", 
resultMap.get(ConfiguredObject.CONTEXT), actualContext);
         List<Map<String, Object>> childList = (List<Map<String, Object>>) 
resultMap.get("testchilds");
@@ -201,18 +204,16 @@ public class ConfiguredObjectToMapConver
 
         resultMap = _converter.convertObjectToMap(_configuredObject,
                                                   ConfiguredObject.class,
-                                                  1,
-                                                  false,
-                                                  false,
-                                                  false,
-                                                  false,
-                                                  120,
-                                                  false);
+                                                  new 
ConfiguredObjectToMapConverter.ConverterOptions(1,
+                                                                               
                       false,
+                                                                               
                       false,
+                                                                               
                       120,
+                                                                               
                       false,
+                                                                               
                       true));
         assertEquals("Unexpected parent map size", 2, resultMap.size());
-        Map<String, Object> inheritedContext = new HashMap<>();
-        inheritedContext.put("key","value");
-        inheritedContext.put("inheritedkey","foo");
-        assertEquals("Incorrect context", inheritedContext, 
resultMap.get(ConfiguredObject.CONTEXT));
+        Map<String, Object> effectiveContext = new HashMap<>();
+        effectiveContext.put("key","value");
+        assertEquals("Incorrect context", effectiveContext, 
resultMap.get(ConfiguredObject.CONTEXT));
         childList = (List<Map<String, Object>>) resultMap.get("testchilds");
         assertEquals("Unexpected number of children", 1, childList.size());
         childMap = childList.get(0);
@@ -243,14 +244,14 @@ public class ConfiguredObjectToMapConver
 
 
          Map<String, Object> resultMap = 
_converter.convertObjectToMap(_configuredObject,
-                                                                            
ConfiguredObject.class,
-                                                                            1,
-                                                                            
false,
-                                                                            
false,
-                                                                            
false,
-                                                                            
false,
-                                                                            20,
-                                                                            
false);
+                                                                       
ConfiguredObject.class,
+                                                                       new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                               
1,
+                                                                               
false,
+                                                                               
false,
+                                                                               
20,
+                                                                               
false,
+                                                                               
false));
         Object children = resultMap.get("testchilds");
         assertNotNull(children);
         assertTrue(children instanceof Collection);
@@ -263,13 +264,12 @@ public class ConfiguredObjectToMapConver
 
         resultMap = _converter.convertObjectToMap(_configuredObject,
                                                   ConfiguredObject.class,
-                                                  1,
-                                                  false,
-                                                  false,
-                                                  false,
-                                                  false,
-                                                  8,
-                                                  false);
+                                                  new 
ConfiguredObjectToMapConverter.ConverterOptions(1,
+                                                                               
                       false,
+                                                                               
                       false,
+                                                                               
                       8,
+                                                                               
                       false,
+                                                                               
                       false));
 
         children = resultMap.get("testchilds");
         assertNotNull(children);
@@ -286,13 +286,12 @@ public class ConfiguredObjectToMapConver
 
         resultMap = _converter.convertObjectToMap(_configuredObject,
                                                   ConfiguredObject.class,
-                                                  1,
-                                                  false,
-                                                  false,
-                                                  false,
-                                                  false,
-                                                  8,
-                                                  false);
+                                                  new 
ConfiguredObjectToMapConverter.ConverterOptions(1,
+                                                                               
                       false,
+                                                                               
                       false,
+                                                                               
                       8,
+                                                                               
                       false,
+                                                                               
                       false));
 
         children = resultMap.get("testchilds");
         assertNotNull(children);
@@ -331,14 +330,14 @@ public class ConfiguredObjectToMapConver
         when(mockChild.isDurable()).thenReturn(true);
 
         Map<String, Object> resultMap = 
_converter.convertObjectToMap(_configuredObject,
-                ConfiguredObject.class,
-                1,
-                false,
-                false,
-                false,
-                false,
-                20,
-                false);
+                                                                      
ConfiguredObject.class,
+                                                                      new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                              
1,
+                                                                              
false,
+                                                                              
false,
+                                                                              
20,
+                                                                              
false,
+                                                                              
false));
         Object children = resultMap.get("testchilds");
         assertNotNull(children);
         assertTrue(children instanceof Collection);
@@ -348,14 +347,13 @@ public class ConfiguredObjectToMapConver
         assertEquals("*****", ((Map) attrs).get("secureAttribute"));
 
         resultMap = _converter.convertObjectToMap(_configuredObject,
-                ConfiguredObject.class,
-                1,
-                true,
-                true,
-                false,
-                true,
-                20,
-                true);
+                                                  ConfiguredObject.class,
+                                                  new 
ConfiguredObjectToMapConverter.ConverterOptions(1,
+                                                                               
                       true,
+                                                                               
                       true,
+                                                                               
                       20,
+                                                                               
                       true,
+                                                                               
                       false));
 
         children = resultMap.get("testchilds");
         assertNotNull(children);
@@ -366,14 +364,13 @@ public class ConfiguredObjectToMapConver
         assertEquals("secret", ((Map) attrs).get("secureAttribute"));
 
         resultMap = _converter.convertObjectToMap(_configuredObject,
-                ConfiguredObject.class,
-                1,
-                true,
-                true,
-                false,
-                false,
-                20,
-                true);
+                                                  ConfiguredObject.class,
+                                                  new 
ConfiguredObjectToMapConverter.ConverterOptions(1,
+                                                                               
                       true,
+                                                                               
                       false,
+                                                                               
                       20,
+                                                                               
                       true,
+                                                                               
                       false));
 
         children = resultMap.get("testchilds");
         assertNotNull(children);
@@ -384,6 +381,114 @@ public class ConfiguredObjectToMapConver
         assertEquals("*****", ((Map) attrs).get("secureAttribute"));
     }
 
+    public void testExcludeInheritedContext()
+    {
+        Model model = 
org.apache.qpid.server.model.testmodels.hierarchy.TestModel.getInstance();
+        final Map<String, Object> carAttributes = new HashMap<>();
+        carAttributes.put(ConfiguredObject.NAME, "myCar");
+        carAttributes.put(ConfiguredObject.CONTEXT, 
Collections.singletonMap("parentTest", "parentTestValue"));
+        TestCar car = model.getObjectFactory().create(TestCar.class,
+                                                      carAttributes);
+        final Map<String, Object> engineAttributes = new HashMap<>();
+        engineAttributes.put(ConfiguredObject.NAME, "myEngine");
+        engineAttributes.put(ConfiguredObject.TYPE, 
TestElecEngineImpl.TEST_ELEC_ENGINE_TYPE);
+        engineAttributes.put(ConfiguredObject.CONTEXT, 
Collections.singletonMap("test", "testValue"));
+        TestEngine engine = (TestEngine) car.createChild(TestEngine.class, 
engineAttributes);
+
+        Map<String, Object> resultMap = _converter.convertObjectToMap(engine,
+                                                                      
ConfiguredObject.class,
+                                                                      new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                              
1,
+                                                                              
false,
+                                                                              
false,
+                                                                              
0,
+                                                                              
false,
+                                                                              
false));
+        Object contextValue = resultMap.get("context");
+        assertTrue("Unexpected type of context", contextValue instanceof Map);
+        assertTrue("Unexpected size of context", ((Map)contextValue).size() > 
1);
+        assertEquals("Unexpected context content", "testValue", 
((Map)contextValue).get("test"));
+        assertEquals("Unexpected context content", "parentTestValue", 
((Map)contextValue).get("parentTest"));
+
+        resultMap = _converter.convertObjectToMap(engine,
+                                                  ConfiguredObject.class,
+                                                  new 
ConfiguredObjectToMapConverter.ConverterOptions(1,
+                                                                               
                       false,
+                                                                               
                       false,
+                                                                               
                       0,
+                                                                               
                       false,
+                                                                               
                       true));
+        contextValue = resultMap.get("context");
+        assertTrue("Unexpected type of context", contextValue instanceof Map);
+        assertEquals("Unexpected size of context", 1, 
((Map)contextValue).size());
+        assertEquals("Unexpected context content","testValue", 
((Map)contextValue).get("test"));
+
+
+
+
+
+        /*
+
+
+
+//        Model model = createTestModel();
+        ConfiguredObjectTypeRegistry typeRegistry = model.getTypeRegistry();
+        Map<String, ConfiguredObjectAttribute<?, ?>> attributeTypes = 
typeRegistry.getAttributeTypes(TestChild.class);
+        ConfiguredObjectAttribute contextAttribute = 
mock(ConfiguredObjectMethodAttribute.class);
+        when(attributeTypes.get(eq("context"))).thenReturn(contextAttribute);
+
+        TestChild mockChild = mock(TestChild.class);
+        when(mockChild.getModel()).thenReturn(model);
+        when(mockChild.getCategoryClass()).thenReturn(TestChild.class);
+        
when(mockChild.getParent(Matchers.<Class>any())).thenReturn(_configuredObject);
+        when(_configuredObject.getModel()).thenReturn(model);
+        
when(_configuredObject.getChildren(TestChild.class)).thenReturn(Arrays.asList(mockChild));
+        
when(model.getParentTypes(TestChild.class)).thenReturn(Collections.<Class<? 
extends ConfiguredObject>>singleton(TestChild.class));
+        when(_configuredObject.getCategoryClass()).thenReturn(TestChild.class);
+
+
+        // set encoded value
+        final Map<String,String> context = new HashMap<>();
+        context.put("test", "testValue");
+        configureMockToReturnOneAttribute(mockChild, "context", context);
+        
when(mockChild.getContextKeys(anyBoolean())).thenReturn(context.keySet());
+        when(mockChild.getContextValue(String.class, 
"test")).thenReturn(context.get("test"));
+
+        final Map<String, String> parentContext = new HashMap<>();
+        parentContext.put("parentTest", "parentTestValue");
+        configureMockToReturnOneAttribute(_configuredObject, "context", 
parentContext);
+        
when(_configuredObject.getContextKeys(anyBoolean())).thenReturn(parentContext.keySet());
+        when(_configuredObject.getContextValue(String.class, 
"parentTest")).thenReturn(parentContext.get("parentTest"));
+
+        Map<String, Object> resultMap = 
_converter.convertObjectToMap(mockChild,
+                                                                      
ConfiguredObject.class,
+                                                                      new 
ConfiguredObjectToMapConverter.ConverterOptions(
+                                                                              
1,
+                                                                              
false,
+                                                                              
false,
+                                                                              
0,
+                                                                              
false,
+                                                                              
false));
+        Object contextValue = resultMap.get("context");
+        assertTrue("Unexpected type of context", contextValue instanceof Map);
+        assertEquals("Unexpected size of context", 2, 
((Map)contextValue).size());
+        assertEquals("Unexpected context content", "testValue", 
((Map)contextValue).get("test"));
+        assertEquals("Unexpected context content", "parentTestValue", 
((Map)contextValue).get("parentTest"));
+
+        resultMap = _converter.convertObjectToMap(mockChild,
+                                                  ConfiguredObject.class,
+                                                  new 
ConfiguredObjectToMapConverter.ConverterOptions(1,
+                                                                               
                       false,
+                                                                               
                       false,
+                                                                               
                       0,
+                                                                               
                       false,
+                                                                               
                       true));
+        contextValue = resultMap.get("context");
+        assertTrue("Unexpected type of context", contextValue instanceof Map);
+        assertEquals("Unexpected size of context", 1, 
((Map)contextValue).size());
+        assertEquals("Unexpected context content","testValue", 
((Map)contextValue).get("test"));*/
+    }
+
     private Model createTestModel()
     {
         Model model = mock(Model.class);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to