This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.resourcecollection-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourcecollection.git
commit ddd03303bd98cd62bacd7982982a3e15eee784b3 Author: Carsten Ziegeler <[email protected]> AuthorDate: Tue May 7 06:09:02 2013 +0000 SLING-2857 : Fix the name of the members resource in ResourceCollection., Apply patch from Amit Gupta git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/collection@1479769 13f79535-47bb-0310-9956-ffa450edef68 --- .../collection/impl/ResourceCollectionImpl.java | 40 +++++++++------------- .../impl/ResourceCollectionManagerImpl.java | 7 ++-- .../impl/ResourceCollectionImplTest.java | 18 ++++++++++ 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/main/java/org/apache/sling/resource/collection/impl/ResourceCollectionImpl.java b/src/main/java/org/apache/sling/resource/collection/impl/ResourceCollectionImpl.java index ccf88a0..f1e937b 100755 --- a/src/main/java/org/apache/sling/resource/collection/impl/ResourceCollectionImpl.java +++ b/src/main/java/org/apache/sling/resource/collection/impl/ResourceCollectionImpl.java @@ -66,12 +66,6 @@ public class ResourceCollectionImpl implements private final Resource membersResource; - private static final String REF_PROPERTY = "sling:resource"; - - private static final String MEMBERS_NODE_NAME = "members"; - - private static final String REFERENCES_PROP = "sling:references"; - /** * Creates a new collection from the given resource * @@ -80,7 +74,7 @@ public class ResourceCollectionImpl implements public ResourceCollectionImpl(Resource resource) { this.resource = resource; resolver = resource.getResourceResolver(); - membersResource = resource.getChild(MEMBERS_NODE_NAME); + membersResource = resource.getChild(ResourceCollectionConstants.MEMBERS_NODE_NAME); } /** @@ -103,15 +97,15 @@ public class ResourceCollectionImpl implements public boolean add(Resource res, Map<String, Object> properties) throws PersistenceException { if (res != null && !contains(res)) { ModifiableValueMap vm = membersResource.adaptTo(ModifiableValueMap.class); - String[] order = vm.get(REFERENCES_PROP, new String[]{}); + String[] order = vm.get(ResourceCollectionConstants.REFERENCES_PROP, new String[]{}); order = (String[]) ArrayUtils.add(order, res.getPath()); - vm.put(REFERENCES_PROP, order); + vm.put(ResourceCollectionConstants.REFERENCES_PROP, order); if (properties == null) { properties = new HashMap<String, Object>(); } - properties.put(REF_PROPERTY, res.getPath()); + properties.put(ResourceCollectionConstants.REF_PROPERTY, res.getPath()); resolver.create( membersResource, ResourceCollectionUtil.createUniqueChildName(membersResource, @@ -130,13 +124,13 @@ public class ResourceCollectionImpl implements public boolean add(Resource res) throws PersistenceException { if (res != null && !contains(res)) { ModifiableValueMap vm = membersResource.adaptTo(ModifiableValueMap.class); - String[] order = vm.get(REFERENCES_PROP, new String[]{}); + String[] order = vm.get(ResourceCollectionConstants.REFERENCES_PROP, new String[]{}); order = (String[]) ArrayUtils.add(order, res.getPath()); - vm.put(REFERENCES_PROP, order); + vm.put(ResourceCollectionConstants.REFERENCES_PROP, order); Map<String, Object> properties = new HashMap<String, Object>(); - properties.put(REF_PROPERTY, res.getPath()); + properties.put(ResourceCollectionConstants.REF_PROPERTY, res.getPath()); resolver.create( membersResource, ResourceCollectionUtil.createUniqueChildName(membersResource, @@ -157,7 +151,7 @@ public class ResourceCollectionImpl implements public Iterator<Resource> getResources() { ValueMap vm = membersResource.adaptTo(ValueMap.class); - String[] references = vm.get(REFERENCES_PROP, new String[]{}); + String[] references = vm.get(ResourceCollectionConstants.REFERENCES_PROP, new String[]{}); List<Resource> resources = new ArrayList<Resource>(); for (String path:references) { @@ -186,7 +180,7 @@ public class ResourceCollectionImpl implements public boolean contains(Resource res) { if (res != null) { ValueMap vm = membersResource.adaptTo(ValueMap.class); - String[] order = vm.get(REFERENCES_PROP, new String[]{}); + String[] order = vm.get(ResourceCollectionConstants.REFERENCES_PROP, new String[]{}); int index = ArrayUtils.indexOf(order, res.getPath(), 0); @@ -208,12 +202,12 @@ public class ResourceCollectionImpl implements resolver.delete(tobeRemovedRes); //remove from order array ModifiableValueMap vm = membersResource.adaptTo(ModifiableValueMap.class); - String[] order = vm.get(REFERENCES_PROP, new String[]{}); + String[] order = vm.get(ResourceCollectionConstants.REFERENCES_PROP, new String[]{}); int index = ArrayUtils.indexOf(order, res.getPath(), 0); order = (String[]) ArrayUtils.remove(order, index); - vm.put(REFERENCES_PROP, order); + vm.put(ResourceCollectionConstants.REFERENCES_PROP, order); return true; } @@ -234,13 +228,13 @@ public class ResourceCollectionImpl implements String resName = res.getName(); if (membersResource.getChild(resName) != null && (res.getPath()).equals(ResourceUtil.getValueMap( - membersResource.getChild(resName)).get(REF_PROPERTY, ""))) + membersResource.getChild(resName)).get(ResourceCollectionConstants.REF_PROPERTY, ""))) return membersResource.getChild(resName); // handle multiple res with same name but different paths Iterator<Resource> children = membersResource.listChildren(); while (children.hasNext()) { Resource r = children.next(); - if (ResourceUtil.getValueMap(r).get(REF_PROPERTY, "").equals( + if (ResourceUtil.getValueMap(r).get(ResourceCollectionConstants.REF_PROPERTY, "").equals( res.getPath())) return r; } } @@ -252,7 +246,7 @@ public class ResourceCollectionImpl implements throw new IllegalArgumentException("Source Resource can not be null"); } ModifiableValueMap vm = membersResource.adaptTo(ModifiableValueMap.class); - String[] order = vm.get(REFERENCES_PROP, new String[]{}); + String[] order = vm.get(ResourceCollectionConstants.REFERENCES_PROP, new String[]{}); String srcPath = srcResource.getPath(); int srcIndex = ArrayUtils.indexOf(order, srcPath); if (srcIndex < 0) { @@ -268,7 +262,7 @@ public class ResourceCollectionImpl implements String destPath = destResource.getPath(); if (destPath.equals(srcPath)) { - String message = MessageFormat.format("Collection ordering failed, as source {} and destination {} can not be same", + String message = MessageFormat.format("Collection ordering failed, as source {0} and destination {1} can not be same", srcPath, destPath); log.error(message); throw new IllegalArgumentException(message); @@ -289,7 +283,7 @@ public class ResourceCollectionImpl implements order = (String[]) ArrayUtils.add(order, destIndex, srcPath); } - vm.put(REFERENCES_PROP, order); + vm.put(ResourceCollectionConstants.REFERENCES_PROP, order); } public ModifiableValueMap getProperties(Resource resource) { @@ -297,7 +291,7 @@ public class ResourceCollectionImpl implements while (entries.hasNext()) { Resource entry = entries.next(); String path = ResourceUtil.getValueMap(entry).get( - REF_PROPERTY, ""); + ResourceCollectionConstants.REF_PROPERTY, ""); if (resource.getPath().equals(path)) { return entry.adaptTo(ModifiableValueMap.class); diff --git a/src/main/java/org/apache/sling/resource/collection/impl/ResourceCollectionManagerImpl.java b/src/main/java/org/apache/sling/resource/collection/impl/ResourceCollectionManagerImpl.java index 450bc7c..4518bf2 100755 --- a/src/main/java/org/apache/sling/resource/collection/impl/ResourceCollectionManagerImpl.java +++ b/src/main/java/org/apache/sling/resource/collection/impl/ResourceCollectionManagerImpl.java @@ -78,7 +78,7 @@ public class ResourceCollectionManagerImpl implements ResourceCollectionManager Map<String, Object> properties) throws PersistenceException { if (parentResource != null) { - String fullPath = parentResource.getPath() + name; + String fullPath = parentResource.getPath() + "/" + name; if (resolver.getResource(fullPath) != null) { throw new IllegalArgumentException("invalid path, " + fullPath @@ -100,11 +100,10 @@ public class ResourceCollectionManagerImpl implements ResourceCollectionManager ResourceCollection.RESOURCE_TYPE); } Resource collectionRes = resolver.create(parentResource, name, properties); - resolver.create(collectionRes, "members", null); + resolver.create(collectionRes, ResourceCollectionConstants.MEMBERS_NODE_NAME, null); log.debug("collection {} created", fullPath); - return new ResourceCollectionImpl( - resolver.getResource(collectionRes.getPath())); + return new ResourceCollectionImpl(collectionRes); } else { log.error("parent resource can not be null"); throw new IllegalArgumentException("parent resource can not be null "); diff --git a/src/test/java/org/apache/sling/resource/collection/impl/ResourceCollectionImplTest.java b/src/test/java/org/apache/sling/resource/collection/impl/ResourceCollectionImplTest.java index d722c3a..dd6b03d 100755 --- a/src/test/java/org/apache/sling/resource/collection/impl/ResourceCollectionImplTest.java +++ b/src/test/java/org/apache/sling/resource/collection/impl/ResourceCollectionImplTest.java @@ -76,6 +76,17 @@ public class ResourceCollectionImplTest { Assert.assertNotNull(resResolver.getResource("/test1")); Assert.assertEquals(ResourceCollection.RESOURCE_TYPE, resResolver.getResource("/test1").getResourceType()); } + + @Test + public void testCheckPath() throws Exception { + final Resource rootResource = resResolver.create(resResolver.getResource("/"), "root", + Collections.singletonMap(ResourceResolver.PROPERTY_RESOURCE_TYPE, (Object)"type")); + + final ResourceCollection collection = rcm.createCollection(rootResource, "test1"); + + + Assert.assertEquals(rootResource.getPath() + "/" + "test1", collection.getPath()); + } @Test public void testGetCollection() throws Exception { @@ -187,6 +198,13 @@ public class ResourceCollectionImplTest { Assert.assertEquals(resPaths[numOfRes], entry.getPath()); numOfRes ++; } + + try { + collection.orderBefore(resource, resource); + Assert.fail("should have thrown IllegalArgument"); + } catch (IllegalArgumentException e) { + + } //change the order collection.orderBefore(resource2, resource); -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
