You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:58:32 UTC
[sling-org-apache-sling-resourcebuilder] 23/36: SLING-6036
ResourceBuilder: Reusing ResourceBuilder instances
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 <ss...@apache.org>
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
"commits@sling.apache.org" <co...@sling.apache.org>.