diff --git a/source/java/org/alfresco/repo/avm/AVMNodeConverter.java b/source/java/org/alfresco/repo/avm/AVMNodeConverter.java index dd811bdbe5..9c51275627 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeConverter.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeConverter.java @@ -114,6 +114,11 @@ public class AVMNodeConverter */ public static String [] SplitBase(String path) { + path = path.replaceAll("/+", "/"); + while (path.endsWith("/") && !path.endsWith(":/")) + { + path = path.substring(0, path.length() - 1); + } if (path.endsWith(":/")) { String [] res = new String[2]; diff --git a/source/java/org/alfresco/repo/avm/AVMNodeService.java b/source/java/org/alfresco/repo/avm/AVMNodeService.java index edc3a4690b..dace99a2c8 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeService.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeService.java @@ -37,7 +37,6 @@ import org.alfresco.service.cmr.avm.AVMNodeDescriptor; import org.alfresco.service.cmr.avm.AVMNotFoundException; import org.alfresco.service.cmr.avm.AVMService; import org.alfresco.service.cmr.avm.AVMStoreDescriptor; -import org.alfresco.service.cmr.avm.AVMWrongTypeException; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.ClassDefinition; import org.alfresco.service.cmr.dictionary.InvalidAspectException; diff --git a/source/java/org/alfresco/repo/avm/AVMServiceImpl.java b/source/java/org/alfresco/repo/avm/AVMServiceImpl.java index b45c72ec68..b8f7b4e0e8 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceImpl.java @@ -384,6 +384,24 @@ public class AVMServiceImpl implements AVMService } fAVMRepository.remove(parent, name); } + + /** + * Remove a node by full path. + * @param path The full path to the node. + */ + public void removeNode(String path) + { + if (path == null) + { + throw new AVMBadArgumentException("Illegal null argument."); + } + String [] basePath = AVMNodeConverter.SplitBase(path); + if (basePath[0] == null) + { + throw new AVMBadArgumentException("Cannot remove root node."); + } + fAVMRepository.remove(basePath[0], basePath[1]); + } /** * Rename a node. diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java index 78d0a22957..1134ca73d5 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java @@ -59,6 +59,32 @@ import org.alfresco.service.transaction.TransactionService; */ public class AVMServiceTest extends AVMServiceTestBase { + /** + * Test one argument remove. + */ + public void testOneArgRemove() + { + try + { + setupBasicTree(); + fService.removeNode("main:/a/b/c/foo/"); + fService.removeNode("main://d"); + try + { + fService.removeNode("main://"); + fail(); + } + catch (AVMException e) + { + // Do nothing. + } + } + catch (Exception e) + { + e.printStackTrace(System.err); + } + } + /** * Test that non head version sources are update correctly. */ diff --git a/source/java/org/alfresco/repo/avm/AVMTestRemote.java b/source/java/org/alfresco/repo/avm/AVMTestRemote.java index 0aba0da1dd..e91109b010 100644 --- a/source/java/org/alfresco/repo/avm/AVMTestRemote.java +++ b/source/java/org/alfresco/repo/avm/AVMTestRemote.java @@ -19,7 +19,6 @@ package org.alfresco.repo.avm; import java.util.List; -import org.alfresco.service.cmr.avm.AVMException; import org.alfresco.service.cmr.avm.AVMStoreDescriptor; import org.springframework.context.support.FileSystemXmlApplicationContext; diff --git a/source/java/org/alfresco/service/cmr/avm/AVMService.java b/source/java/org/alfresco/service/cmr/avm/AVMService.java index 83b434a625..5ac0fed4c2 100644 --- a/source/java/org/alfresco/service/cmr/avm/AVMService.java +++ b/source/java/org/alfresco/service/cmr/avm/AVMService.java @@ -261,6 +261,12 @@ public interface AVMService */ public void removeNode(String parent, String name); + /** + * Remove a node from by its full path. + * @param path The full path to the node to remove. + */ + public void removeNode(String path); + /** * Rename a node. * @param srcParent The simple absolute path to the parent folder.