To list deleted nodes, use the listDeletedNodes method of the TrashcanApi.
For more information about this ReST API endpoint, see List Deleted Folders and Files (Trashcan).
For a description of the common parameters, such as include, see Common Parameters.
import org.alfresco.core.handler.TrashcanApi; import org.alfresco.core.model.DeletedNodeEntry; import org.alfresco.core.model.DeletedNodesPaging; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.ArrayList; import java.util.List; @Component public class ListDeletedNodesCmd { static final Logger LOGGER = LoggerFactory.getLogger(ListDeletedNodesCmd.class); @Autowired TrashcanApi trashcanApi; public void execute() throws IOException { Integer skipCount = 0; Integer maxItems = 100; List<String> include = new ArrayList<>(); include.add("path"); LOGGER.info("Listing soft deleted nodes in the trashcan:"); DeletedNodesPaging deletedNodes = trashcanApi.listDeletedNodes(skipCount, maxItems, include).getBody(); for (DeletedNodeEntry deletedNodeEntry: deletedNodes.getList().getEntries()) { LOGGER.info(" Deleted node: {}", deletedNodeEntry.getEntry()); } } }
Executing this code would list the soft deleted nodes that exist in the so called “Trashcan”:
% java -jar target/rest-api-0.0.1-SNAPSHOT.jar list-deleted-nodes 2021-05-05 09:38:54.983 INFO 14986 --- [ main] o.a.tutorial.restapi.RestApiApplication : Started RestApiApplication in 4.404 seconds (JVM running for 4.861) 2021-05-05 09:38:54.985 INFO 14986 --- [ main] o.a.tutorial.restapi.RestApiApplication : args[0]: list-deleted-nodes 2021-05-05 09:38:54.986 INFO 14986 --- [ main] o.a.t.restapi.ListDeletedNodesCmd : Listing soft deleted nodes in the trashcan: 2021-05-05 09:38:55.333 INFO 14986 --- [ main] o.a.t.restapi.ListDeletedNodesCmd : Deleted node: class DeletedNode { id: d32e1b4b-2ae0-48c2-9ee7-6323f8f4e96b name: My Gadgets nodeType: cm:folder isFolder: true isFile: false isLocked: false modifiedAt: 2021-04-30T15:46:17.334Z modifiedByUser: class UserInfo { displayName: Administrator id: admin } createdAt: 2021-04-30T15:46:16.332Z createdByUser: class UserInfo { displayName: Administrator id: admin } parentId: null isLink: null isFavorite: null content: null aspectNames: null properties: null allowableOperations: null path: class PathInfo { elements: [class PathElement { id: e439190c-3fe0-48a1-8a9a-374fbc54b570 name: Company Home nodeType: cm:folder aspectNames: [cm:titled, cm:auditable, app:uifacets] }] name: /Company Home isComplete: true } permissions: null definition: null archivedByUser: class UserInfo { displayName: Administrator id: admin } archivedAt: 2021-05-05T08:36:11.141Z } 2021-05-05 09:38:55.333 INFO 14986 --- [ main] o.a.t.restapi.ListDeletedNodesCmd : Deleted node: class DeletedNode { id: fe955da0-c4e5-42d3-972f-697424b546b1 name: newname.txt nodeType: acme:document isFolder: false isFile: true isLocked: false modifiedAt: 2021-05-04T09:52:17.053Z modifiedByUser: class UserInfo { displayName: Administrator id: admin } createdAt: 2021-05-04T09:52:17.053Z createdByUser: class UserInfo { displayName: Administrator id: admin } parentId: null isLink: null isFavorite: null content: class ContentInfo { mimeType: text/plain mimeTypeName: Plain Text sizeInBytes: 30 encoding: ISO-8859-1 } aspectNames: null properties: null allowableOperations: null path: class PathInfo { elements: [class PathElement { id: e439190c-3fe0-48a1-8a9a-374fbc54b570 name: Company Home nodeType: cm:folder aspectNames: [cm:titled, cm:auditable, app:uifacets] }, class PathElement { id: 7f041db0-fdb6-4185-b921-2fb9ed381480 name: Imap Attachments nodeType: cm:folder aspectNames: [cm:titled, cm:auditable, app:uifacets] }] name: /Company Home/Imap Attachments isComplete: true } permissions: null definition: null archivedByUser: class UserInfo { displayName: Administrator id: admin } archivedAt: 2021-05-04T12:47:10.524Z }
Note the extra properties at the end that tells you when the node was soft deleted and by who (i.e. archivedAt and archivedByUser). Also, by setting the include parameter to path we get information about where the node was located before it was deleted (i.e. path.name)