You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2009/10/10 11:29:20 UTC

svn commit: r823834 - in /sling/trunk/bundles/jcr/resource/src: main/java/org/apache/sling/jcr/resource/internal/ test/java/org/apache/sling/jcr/resource/internal/

Author: cziegeler
Date: Sat Oct 10 09:29:20 2009
New Revision: 823834

URL: http://svn.apache.org/viewvc?rev=823834&view=rev
Log:
SLING-1149 : JcrPropertyMap doesn't allow "./property" style access any more

Modified:
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiablePropertyMap.java
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrPropertyMap.java
    sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrPropertyMapTest.java

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiablePropertyMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiablePropertyMap.java?rev=823834&r1=823833&r2=823834&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiablePropertyMap.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiablePropertyMap.java Sat Oct 10 09:29:20 2009
@@ -67,7 +67,8 @@
     /**
      * @see java.util.Map#put(java.lang.Object, java.lang.Object)
      */
-    public Object put(String key, Object value) {
+    public Object put(String aKey, Object value) {
+        final String key = checkKey(aKey);
         if ( key == null || key.indexOf('/') != -1 ) {
             throw new IllegalArgumentException("Invalid key: " + key);
         }
@@ -107,7 +108,11 @@
     /**
      * @see java.util.Map#remove(java.lang.Object)
      */
-    public Object remove(Object key) {
+    public Object remove(Object aKey) {
+        if ( aKey == null ) {
+            return null;
+        }
+        final String key = checkKey(aKey.toString());
         readFully();
         final Object oldValue = this.cache.remove(key);
         this.valueCache.remove(key);

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrPropertyMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrPropertyMap.java?rev=823834&r1=823833&r2=823834&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrPropertyMap.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrPropertyMap.java Sat Oct 10 09:29:20 2009
@@ -101,11 +101,22 @@
 
     // ---------- ValueMap
 
+    protected String checkKey(final String key) {
+        if ( key != null && key.startsWith("./") ) {
+            return key.substring(2);
+        }
+        return key;
+    }
+
     /**
      * @see org.apache.sling.api.resource.ValueMap#get(java.lang.String, java.lang.Class)
      */
     @SuppressWarnings("unchecked")
-    public <T> T get(final String key, final Class<T> type) {
+    public <T> T get(final String aKey, final Class<T> type) {
+        if ( aKey == null ) {
+            return null;
+        }
+        final String key = checkKey(aKey);
         if (type == null) {
             return (T) get(key);
         }
@@ -124,7 +135,11 @@
      * @see org.apache.sling.api.resource.ValueMap#get(java.lang.String, java.lang.Object)
      */
     @SuppressWarnings("unchecked")
-    public <T> T get(final String key,final T defaultValue) {
+    public <T> T get(final String aKey,final T defaultValue) {
+        if ( aKey == null ) {
+            return null;
+        }
+        final String key = checkKey(aKey);
         if (defaultValue == null) {
             return (T) get(key);
         }
@@ -146,13 +161,14 @@
     /**
      * @see java.util.Map#get(java.lang.Object)
      */
-    public Object get(final Object key) {
-        if ( key == null ) {
+    public Object get(final Object aKey) {
+        if ( aKey == null ) {
             return null;
         }
+        final String key = checkKey(aKey.toString());
         CacheEntry entry = cache.get(key);
         if (entry == null) {
-            entry = read((String)key);
+            entry = read(key);
         }
         final Object value = (entry == null ? null : entry.defaultValue);
         return value;

Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrPropertyMapTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrPropertyMapTest.java?rev=823834&r1=823833&r2=823834&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrPropertyMapTest.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrPropertyMapTest.java Sat Oct 10 09:29:20 2009
@@ -251,6 +251,16 @@
         search(vm.values().iterator(), "value");
     }
 
+    public void testDotSlash() throws Exception {
+        final String prop = "myProp";
+        final String value = "value";
+        this.rootNode.setProperty(prop, value);
+        final ValueMap vm = this.createPropertyMap(this.rootNode);
+        assertEquals(value, vm.get(prop));
+        assertEquals(value, vm.get("./" + prop));
+        assertTrue(vm.containsKey("./" + prop));
+    }
+
     protected void search(Iterator<?> i, Object value) {
         boolean found = false;
         while ( !found && i.hasNext() ) {