SLING-3451 : Support for deep reads from a value map


git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/jmxprovider@1577531 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 09fe8c0..ef3a62f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,7 +64,7 @@
         <dependency>
     	    <groupId>org.apache.sling</groupId>
     	    <artifactId>org.apache.sling.api</artifactId>
-    	    <version>2.5.0</version>
+    	    <version>2.6.1-SNAPSHOT</version>
     	    <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/sling/jmx/provider/impl/AttributeResource.java b/src/main/java/org/apache/sling/jmx/provider/impl/AttributeResource.java
index eabf9d2..64d7e32 100644
--- a/src/main/java/org/apache/sling/jmx/provider/impl/AttributeResource.java
+++ b/src/main/java/org/apache/sling/jmx/provider/impl/AttributeResource.java
@@ -43,6 +43,7 @@
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.DeepReadValueMapDecorator;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 
 public class AttributeResource extends AbstractResource {
@@ -115,7 +116,7 @@
     public <AdapterType> AdapterType adaptTo(final Class<AdapterType> type) {
         if ( type == ValueMap.class || type == Map.class ) {
             final Map<String, Object> propMap = this.getPropertiesMap();
-            return (AdapterType) new ValueMapDecorator(propMap);
+            return (AdapterType) new DeepReadValueMapDecorator(this, new ValueMapDecorator(propMap));
         }
         return super.adaptTo(type);
     }
diff --git a/src/main/java/org/apache/sling/jmx/provider/impl/AttributesResource.java b/src/main/java/org/apache/sling/jmx/provider/impl/AttributesResource.java
index b3d65f6..24490b7 100644
--- a/src/main/java/org/apache/sling/jmx/provider/impl/AttributesResource.java
+++ b/src/main/java/org/apache/sling/jmx/provider/impl/AttributesResource.java
@@ -26,6 +26,7 @@
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.DeepReadValueMapDecorator;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 
 public class AttributesResource extends AbstractResource {
@@ -88,7 +89,7 @@
     public <AdapterType> AdapterType adaptTo(final Class<AdapterType> type) {
         if ( type == ValueMap.class || type == Map.class ) {
             final Map<String, Object> propMap = this.getPropertiesMap();
-            return (AdapterType) new ValueMapDecorator(propMap);
+            return (AdapterType) new DeepReadValueMapDecorator(this, new ValueMapDecorator(propMap));
         }
         return super.adaptTo(type);
     }
diff --git a/src/main/java/org/apache/sling/jmx/provider/impl/MBeanResource.java b/src/main/java/org/apache/sling/jmx/provider/impl/MBeanResource.java
index 78c9e5a..2364541 100644
--- a/src/main/java/org/apache/sling/jmx/provider/impl/MBeanResource.java
+++ b/src/main/java/org/apache/sling/jmx/provider/impl/MBeanResource.java
@@ -35,6 +35,7 @@
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.DeepReadValueMapDecorator;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 
 public class MBeanResource extends AbstractResource {
@@ -136,7 +137,7 @@
     public <AdapterType> AdapterType adaptTo(final Class<AdapterType> type) {
         if ( type == ValueMap.class || type == Map.class ) {
             final Map<String, Object> propMap = this.getPropertiesMap();
-            return (AdapterType) new ValueMapDecorator(propMap);
+            return (AdapterType) new DeepReadValueMapDecorator(this, new ValueMapDecorator(propMap));
         }
         return super.adaptTo(type);
     }
diff --git a/src/main/java/org/apache/sling/jmx/provider/impl/MapResource.java b/src/main/java/org/apache/sling/jmx/provider/impl/MapResource.java
index 596f4e0..2e75e96 100644
--- a/src/main/java/org/apache/sling/jmx/provider/impl/MapResource.java
+++ b/src/main/java/org/apache/sling/jmx/provider/impl/MapResource.java
@@ -26,6 +26,7 @@
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.DeepReadValueMapDecorator;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 
 public class MapResource extends AbstractResource {
@@ -98,7 +99,7 @@
     public <AdapterType> AdapterType adaptTo(final Class<AdapterType> type) {
         if ( type == ValueMap.class || type == Map.class ) {
             final Map<String, Object> propMap = Collections.unmodifiableMap(this.properties);
-            return (AdapterType) new ValueMapDecorator(propMap);
+            return (AdapterType) new DeepReadValueMapDecorator(this, new ValueMapDecorator(propMap));
         }
         return super.adaptTo(type);
     }
diff --git a/src/main/java/org/apache/sling/jmx/provider/impl/RootResource.java b/src/main/java/org/apache/sling/jmx/provider/impl/RootResource.java
index 34fd064..0a56c8a 100644
--- a/src/main/java/org/apache/sling/jmx/provider/impl/RootResource.java
+++ b/src/main/java/org/apache/sling/jmx/provider/impl/RootResource.java
@@ -25,6 +25,7 @@
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.DeepReadValueMapDecorator;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 
 public class RootResource extends AbstractResource {
@@ -80,7 +81,7 @@
     public <AdapterType> AdapterType adaptTo(final Class<AdapterType> type) {
         if ( type == ValueMap.class || type == Map.class ) {
             final Map<String, Object> propMap = this.getPropertiesMap();
-            return (AdapterType) new ValueMapDecorator(propMap);
+            return (AdapterType) new DeepReadValueMapDecorator(this, new ValueMapDecorator(propMap));
         }
         return super.adaptTo(type);
     }