You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2016/09/12 14:22:53 UTC

svn commit: r1760380 - in /sling/trunk/bundles/extensions/resourcebuilder/src: main/java/org/apache/sling/resourcebuilder/api/ main/java/org/apache/sling/resourcebuilder/impl/ test/java/org/apache/sling/resourcebuilder/impl/

Author: sseifert
Date: Mon Sep 12 14:22:52 2016
New Revision: 1760380

URL: http://svn.apache.org/viewvc?rev=1760380&view=rev
Log:
SLING-6050 ResourceBuilder: Support Map for resource properties

Modified:
    sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/api/ResourceBuilder.java
    sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java
    sling/trunk/bundles/extensions/resourcebuilder/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java

Modified: sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/api/ResourceBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/api/ResourceBuilder.java?rev=1760380&r1=1760379&r2=1760380&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/api/ResourceBuilder.java (original)
+++ sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/api/ResourceBuilder.java Mon Sep 12 14:22:52 2016
@@ -19,6 +19,7 @@
 package org.apache.sling.resourcebuilder.api;
 
 import java.io.InputStream;
+import java.util.Map;
 
 import org.apache.sling.api.resource.Resource;
 
@@ -39,7 +40,17 @@ public interface ResourceBuilder {
      * @param properties optional name-value pairs 
      * @return this builder
      */
-    ResourceBuilder resource(String path, Object ... properties);
+    ResourceBuilder resource(String path, Object... properties);
+
+    /** Create a Resource, which optionally becomes the current 
+     *  parent Resource. 
+     * @param path The path of the Resource to create.
+     *    If it's a relative path this builder's current resource is used as parent.
+     *    Otherwise the resource is created ad the given absoulte path.
+     * @param properties Name-value pairs 
+     * @return this builder
+     */
+    ResourceBuilder resource(String path, Map<String, Object> properties);
 
     /** Create a file under the current parent resource
      * @param filename The name of the created file

Modified: sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java?rev=1760380&r1=1760379&r2=1760380&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java (original)
+++ sling/trunk/bundles/extensions/resourcebuilder/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java Mon Sep 12 14:22:52 2016
@@ -27,6 +27,7 @@ import org.apache.sling.api.resource.Per
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.commons.mime.MimeTypeService;
 import org.apache.sling.resourcebuilder.api.ResourceBuilder;
 
@@ -106,7 +107,7 @@ public class ResourceBuilderImpl impleme
     }
     
     @Override
-    public ResourceBuilder resource(String path, Object... properties) {
+    public ResourceBuilder resource(String path, Map<String,Object> properties) {
         Resource r = null;
         
         final String parentPath;
@@ -124,17 +125,16 @@ public class ResourceBuilderImpl impleme
         
         try {
             r = currentParent.getResourceResolver().getResource(fullPath);
-            final Map<String, Object> props = MapArgsConverter.toMap(properties);
-            if(r == null) {
+            if (r == null) {
                 r = currentParent.getResourceResolver().create(myParent, 
-                        ResourceUtil.getName(fullPath), props);
+                        ResourceUtil.getName(fullPath), properties);
             } else {
                 // Resource exists, set our properties
                 final ModifiableValueMap mvm = r.adaptTo(ModifiableValueMap.class);
                 if(mvm == null) {
                     throw new IllegalStateException("Cannot modify properties of " + r.getPath());
                 }
-                for(Map.Entry <String, Object> e : props.entrySet()) {
+                for(Map.Entry <String, Object> e : properties.entrySet()) {
                     mvm.put(e.getKey(), e.getValue());
                 }
             }
@@ -151,6 +151,20 @@ public class ResourceBuilderImpl impleme
         return this;
     }
     
+    @SuppressWarnings("unchecked")
+    @Override
+    public ResourceBuilder resource(String path, Object... properties) {
+        if (properties == null || properties.length == 0) {
+            return resource(path, ValueMap.EMPTY);
+        }
+        else if (properties.length == 1 && properties[0] instanceof Map) {
+            return resource(path, (Map<String,Object>)properties[0]);
+        }
+        else {
+            return resource(path, MapArgsConverter.toMap(properties));
+        }
+    }
+    
     /** Create a Resource at the specified path if none exists yet,
      *  using the current intermediate primary type. "Stolen" from
      *  the sling-mock module's ContentBuilder class.

Modified: sling/trunk/bundles/extensions/resourcebuilder/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/resourcebuilder/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java?rev=1760380&r1=1760379&r2=1760380&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/resourcebuilder/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java (original)
+++ sling/trunk/bundles/extensions/resourcebuilder/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java Mon Sep 12 14:22:52 2016
@@ -24,6 +24,8 @@ import static org.junit.Assert.fail;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.when;
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Random;
 import java.util.UUID;
 
@@ -109,6 +111,18 @@ public class ResourceBuilderImplTest {
             .commit();
         
         A.assertProperties("child", "title", "foo");
+        assertEquals(A.fullPath("child"), A.assertResource("child").getPath());
+    }
+    
+    @Test
+    public void basicResourceWithMap() throws Exception {
+        Map<String,Object> props = new HashMap<String,Object>();
+        props.put("title", "foo");
+        getBuilder(testRootPath)
+            .resource("child", props)
+            .commit();
+        
+        A.assertProperties("child", "title", "foo");
         assertEquals(A.fullPath("child"), A.assertResource("child").getPath());
     }