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)