The following event filter checks if a passed in node ID is equal to a desired parent folder node ID. This event filter can be used to check if a file or folder is located in a specific folder. To create a custom event filter you need to create a class that extends the org.alfresco.event.sdk.handling.filter.AbstractEventFilter class and implement the test method:
package org.alfresco.tutorial.events;
import org.alfresco.event.sdk.handling.filter.AbstractEventFilter;
import org.alfresco.event.sdk.model.v1.model.DataAttributes;
import org.alfresco.event.sdk.model.v1.model.NodeResource;
import org.alfresco.event.sdk.model.v1.model.RepoEvent;
import org.alfresco.event.sdk.model.v1.model.Resource;
import java.util.Objects;
/**
* Filter that can be used when a node needs to be in a specific folder.
*/
public class ParentFolderFilter extends AbstractEventFilter {
// The node ID for the folder we want to check against
private final String parentId;
// Private ctor, make sure ID is not null
private ParentFolderFilter(final String parentId) {
this.parentId = Objects.requireNonNull(parentId);
}
// When using the filter, pass in the folder node ID we want to check against
public static ParentFolderFilter of(final String parentId) {
return new ParentFolderFilter(parentId);
}
// The actual test:
// get the node resource we are testing (such as a file node),
// then get its primary parent folder ID and check if it matches desired folder Node ID
public boolean test(RepoEvent<DataAttributes<Resource>> event) {
NodeResource resource = (NodeResource) event.getData().getResource();
boolean parentFound = resource.getPrimaryHierarchy().get(0).equals(parentId);
return isNodeEvent(event) && parentFound;
}
}
This event filter can now be used in an event handler class as follows (in this case together with another filter):
@Component
public class ContentUploadedEventHandler implements OnNodeCreatedEventHandler {
private String folderID = "5f355d16-f824-4173-bf4b-b1ec37ef5549";
...
public EventFilter getEventFilter() {
// Check if uploaded file is located in desired folder
return IsFileFilter.get()
.and(ParentFolderFilter.of(folderID));
}