From cb22f40e356c0239038faf3c4ae63dc8e642506d Mon Sep 17 00:00:00 2001 From: Ancuta Morarasu Date: Wed, 11 May 2016 12:14:50 +0000 Subject: [PATCH] Merged HEAD (5.2) to 5.2.N (5.2.1) 126599 jkaabimofrad: Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2) 124903 gjames: RA-850 Purge Deleted Node git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@126944 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/rest/api/DeletedNodes.java | 1 + .../rest/api/impl/DeletedNodesImpl.java | 8 ++++ .../api/trashcan/TrashcanEntityResource.java | 12 ++++-- .../org/alfresco/rest/DeletedNodesTest.java | 39 ++++++++++++++++--- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/source/java/org/alfresco/rest/api/DeletedNodes.java b/source/java/org/alfresco/rest/api/DeletedNodes.java index 1c74f798a3..2584c1b4a4 100644 --- a/source/java/org/alfresco/rest/api/DeletedNodes.java +++ b/source/java/org/alfresco/rest/api/DeletedNodes.java @@ -34,4 +34,5 @@ public interface DeletedNodes CollectionWithPagingInfo listDeleted(Parameters parameters); Node getDeletedNode(String originalId, Parameters parameters); Node restoreArchivedNode(String archivedId); + void purgeArchivedNode(String archivedId); } diff --git a/source/java/org/alfresco/rest/api/impl/DeletedNodesImpl.java b/source/java/org/alfresco/rest/api/impl/DeletedNodesImpl.java index 2475d4a237..eddd27e749 100644 --- a/source/java/org/alfresco/rest/api/impl/DeletedNodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/DeletedNodesImpl.java @@ -160,4 +160,12 @@ public class DeletedNodesImpl implements DeletedNodes throw new ApiException("Unable to restore node "+archivedId); } } + + @Override + public void purgeArchivedNode(String archivedId) + { + //First check the node is valid and has been archived. + NodeRef validatedNodeRef = nodes.validateNode(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, archivedId); + nodeArchiveService.purgeArchivedNode(validatedNodeRef); + } } diff --git a/source/java/org/alfresco/rest/api/trashcan/TrashcanEntityResource.java b/source/java/org/alfresco/rest/api/trashcan/TrashcanEntityResource.java index 531ac3df50..90ca09f858 100644 --- a/source/java/org/alfresco/rest/api/trashcan/TrashcanEntityResource.java +++ b/source/java/org/alfresco/rest/api/trashcan/TrashcanEntityResource.java @@ -50,7 +50,7 @@ import java.util.List; */ @EntityResource(name="deleted-nodes", title = "Deleted Nodes") public class TrashcanEntityResource implements - EntityResourceAction.ReadById, EntityResourceAction.Read + EntityResourceAction.ReadById, EntityResourceAction.Read, EntityResourceAction.Delete { private DeletedNodes deletedNodes; @@ -66,9 +66,9 @@ public class TrashcanEntityResource implements } @Override - public Node readById(String id, Parameters parameters) throws EntityNotFoundException + public Node readById(String nodeId, Parameters parameters) throws EntityNotFoundException { - return deletedNodes.getDeletedNode(id, parameters); + return deletedNodes.getDeletedNode(nodeId, parameters); } @Operation("restore") @@ -77,4 +77,10 @@ public class TrashcanEntityResource implements { return deletedNodes.restoreArchivedNode(nodeId); } + + @Override + public void delete(String nodeId, Parameters parameters) + { + deletedNodes.purgeArchivedNode(nodeId); + } } diff --git a/source/test-java/org/alfresco/rest/DeletedNodesTest.java b/source/test-java/org/alfresco/rest/DeletedNodesTest.java index 68442df27e..99b614bab4 100644 --- a/source/test-java/org/alfresco/rest/DeletedNodesTest.java +++ b/source/test-java/org/alfresco/rest/DeletedNodesTest.java @@ -155,24 +155,53 @@ public class DeletedNodesTest extends AbstractSingleNetworkSiteTest Document documentSameName = createDocument(createdFolder, "restoreme.txt"); //Can't restore a node of the same name - HttpResponse response = post("deleted-nodes/"+document.getId()+"/restore", u1.getId(), null, null, Status.STATUS_CONFLICT); + HttpResponse response = post(URL_DELETED_NODES+"/"+document.getId()+"/restore", u1.getId(), null, null, Status.STATUS_CONFLICT); delete(URL_NODES, u1.getId(), documentSameName.getId(), 204); //Now we can restore it. - response = post("deleted-nodes/"+document.getId()+"/restore", u1.getId(), null, null, 201); + response = post(URL_DELETED_NODES+"/"+document.getId()+"/restore", u1.getId(), null, null, 201); delete(URL_NODES, u1.getId(), createdFolder.getId(), 204); //We deleted the parent folder so lets see if we can restore a child doc, hopefully not. - response = post("deleted-nodes/"+documentSameName.getId()+"/restore", u1.getId(), null, null, Status.STATUS_NOT_FOUND); + response = post(URL_DELETED_NODES+"/"+documentSameName.getId()+"/restore", u1.getId(), null, null, Status.STATUS_NOT_FOUND); //Can't delete "nonsense" noderef response = post("deleted-nodes/nonsense/restore", u1.getId(), null, null, Status.STATUS_NOT_FOUND); //User 2 can't restore it but user 1 can. - response = post("deleted-nodes/"+createdFolder.getId()+"/restore", u2.getId(), null, null, Status.STATUS_FORBIDDEN); - response = post("deleted-nodes/"+createdFolder.getId()+"/restore", u1.getId(), null, null, 201); + response = post(URL_DELETED_NODES+"/"+createdFolder.getId()+"/restore", u2.getId(), null, null, Status.STATUS_FORBIDDEN); + response = post(URL_DELETED_NODES+"/"+createdFolder.getId()+"/restore", u1.getId(), null, null, 201); + } + + @Test + public void testCreateAndPurge() throws Exception + { + publicApiClient.setRequestContext(new RequestContext(u1.getId())); + Date now = new Date(); + String folder1 = "folder" + now.getTime() + "_1"; + Folder createdFolder = createFolder(u1.getId(), docLibNodeRef.getId(), folder1, null); + assertNotNull(createdFolder); + + delete(URL_NODES, u1.getId(), createdFolder.getId(), 204); + + HttpResponse response = getSingle(URL_DELETED_NODES, u1.getId(), createdFolder.getId(), 200); + Folder fNode = jacksonUtil.parseEntry(response.getJsonResponse(), Folder.class); + assertNotNull(fNode); + + //try purging "nonsense" + delete(URL_DELETED_NODES, u1.getId(), "nonsense", 404); + + //User 2 can't do it + delete(URL_DELETED_NODES, u2.getId(), createdFolder.getId(), Status.STATUS_FORBIDDEN); + + //Now purge the folder + delete(URL_DELETED_NODES, u1.getId(), createdFolder.getId(), 204); + + //This time we can't find it. + response = getSingle(URL_DELETED_NODES, u1.getId(), createdFolder.getId(), 404); + } protected void checkDeletedNodes(Date now, Folder createdFolder, Folder createdFolderNonSite, Document document, List nodes)