Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

SOLVED

AEM - Predicate to list only immediate children

infinityskyline
Level 2
Level 2

I am using aem-commons's contextualPathBrowser (similar to pathfiled component) with a predicate property. The java predicate class will evaluate the nodes and only return children pages(cq:Page) in the path picker for user to select from. Predicate class given below:

 

@Component(
        service = Predicate.class,
        property = {
                "predicate.name=pagePathPredicate"
        }
    )
public class PagePathPredicate extends AbstractNodePredicate {


    @Override
    public boolean evaluate(final Node node) throws RepositoryException {
        try {
            return isInPredicate(node);
        } catch (RepositoryException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }

    private boolean isInPredicate(final Node node) throws RepositoryException {
        if (node.getProperty("jcr:primaryType").getString().equals("cq:Page")) {
            return true;
        }
        return false;
    }
}

The code works well and list only node with jcr:primaryType = cq:Page. However, finding it difficult to list only children pages of the page user is currently on, as I am not sure how to fetch the current resource/node/page in the Predicate class.  Or is there a better way to solve this? I don't know how to use query builder.

1 Accepted Solution
shelly-goel
Correct answer by
Community Advisor
Community Advisor

@infinityskyline  I would suggest to go with a clientlib (categories cq.authoring.dialog) where you would be able to get the current page and add your filter logic as needed. An example below:

http://experience-aem.blogspot.com/2016/04/aem-62-touch-ui-path-browser-filter-for-autocomplete-and-...

Here current page path is set as the default value though you can tweak it as per your requirements and set the rootPath based on current page path alongwith the filtering logic.

View solution in original post

3 Replies
shelly-goel
Correct answer by
Community Advisor
Community Advisor

@infinityskyline  I would suggest to go with a clientlib (categories cq.authoring.dialog) where you would be able to get the current page and add your filter logic as needed. An example below:

http://experience-aem.blogspot.com/2016/04/aem-62-touch-ui-path-browser-filter-for-autocomplete-and-...

Here current page path is set as the default value though you can tweak it as per your requirements and set the rootPath based on current page path alongwith the filtering logic.

View solution in original post

shelly-goel
Community Advisor
Community Advisor
Please check if the required dependencies are available on the clientlib like 'underscore' mentioned in the article