This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.resourcebuilder-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourcebuilder.git
commit a98c8621de39f9a5c42ecc267b9c95f26a584e59 Author: Stefan Seifert <[email protected]> AuthorDate: Mon Sep 5 20:06:48 2016 +0000 SLING-6036 ResourceBuilder: Reusing ResourceBuilder instances git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/resourcebuilder@1759351 13f79535-47bb-0310-9956-ffa450edef68 --- .../resourcebuilder/impl/ResourceBuilderImpl.java | 35 ++++++++++++---------- .../impl/ResourceBuilderImplTest.java | 22 +++++++++++++- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java b/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java index 4905387..3440a27 100644 --- a/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java +++ b/src/main/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImpl.java @@ -59,8 +59,18 @@ public class ResourceBuilderImpl implements ResourceBuilder { } originalParent = parent; resourceResolver = originalParent.getResourceResolver(); - withIntermediatePrimaryType(null); - atParent(); + intermediatePrimaryType = DEFAULT_PRIMARY_TYPE; + currentParent = parent; + hierarchyMode = true; + } + + private ResourceBuilderImpl cloneResourceBuilder(Resource newCurrentParent, + String newIntermediatePrimaryType, boolean newHierarchyMode) { + ResourceBuilderImpl clone = new ResourceBuilderImpl(originalParent, mimeTypeService); + clone.currentParent = newCurrentParent; + clone.intermediatePrimaryType = newIntermediatePrimaryType; + clone.hierarchyMode = newHierarchyMode; + return clone; } @Override @@ -80,9 +90,7 @@ public class ResourceBuilderImpl implements ResourceBuilder { @Override public ResourceBuilder atParent() { - currentParent = originalParent; - hierarchyMode(); - return this; + return cloneResourceBuilder(originalParent, this.intermediatePrimaryType, true); } private boolean isAbsolutePath(String path) { @@ -145,10 +153,10 @@ public class ResourceBuilderImpl implements ResourceBuilder { "PersistenceException while creating Resource " + fullPath, pex); } - if(r == null) { + if (r == null) { throw new RuntimeException("Failed to get or create resource " + fullPath); } else if(hierarchyMode) { - currentParent = r; + return cloneResourceBuilder(r, this.intermediatePrimaryType, this.hierarchyMode); } return this; } @@ -231,9 +239,8 @@ public class ResourceBuilderImpl implements ResourceBuilder { throw new RuntimeException("Unable to get or created file resource " + relativePath + " under " + currentParent.getPath()); } if(hierarchyMode) { - currentParent = file; + return cloneResourceBuilder(file, this.intermediatePrimaryType, this.hierarchyMode); } - return this; } @@ -244,20 +251,18 @@ public class ResourceBuilderImpl implements ResourceBuilder { @Override public ResourceBuilder withIntermediatePrimaryType(String primaryType) { - intermediatePrimaryType = primaryType == null ? DEFAULT_PRIMARY_TYPE : primaryType; - return this; + String intermediatePrimaryType = primaryType == null ? DEFAULT_PRIMARY_TYPE : primaryType; + return cloneResourceBuilder(currentParent, intermediatePrimaryType, hierarchyMode); } @Override public ResourceBuilder siblingsMode() { - hierarchyMode = false; - return this; + return cloneResourceBuilder(currentParent, intermediatePrimaryType, false); } @Override public ResourceBuilder hierarchyMode() { - hierarchyMode = true; - return this; + return cloneResourceBuilder(currentParent, intermediatePrimaryType, true); } @Override diff --git a/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java b/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java index 6d3cf52..def23ac 100644 --- a/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java +++ b/src/test/java/org/apache/sling/resourcebuilder/impl/ResourceBuilderImplTest.java @@ -30,6 +30,7 @@ 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.commons.mime.MimeTypeService; +import org.apache.sling.resourcebuilder.api.ResourceBuilder; import org.apache.sling.resourcebuilder.test.ResourceAssertions; import org.apache.sling.testing.mock.sling.ResourceResolverType; import org.apache.sling.testing.mock.sling.junit.SlingContext; @@ -345,5 +346,24 @@ public class ResourceBuilderImplTest { A.assertResource("/g/h/i/j/l/m"); A.assertResource("/o/p/q"); } - + + @Test + public void reuseInstance() throws Exception { + ResourceBuilder content = new ResourceBuilderService() + .forResolver(resourceResolver) + .resource("/content"); + content.resource("a"); + content.resource("b/c"); + content.resource("/test") + .siblingsMode() + .resource("1") + .resource("2"); + + A.assertResource("/content/a"); + A.assertResource("/content/b/c"); + A.assertResource("/test"); + A.assertResource("/test/1"); + A.assertResource("/test/2"); + } + } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
