CollectionPredicateEvaluator.java 1.7 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.query.Row
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.resource.collection.ResourceCollection
 */
package com.day.cq.search.eval;

import com.day.cq.search.Predicate;
import com.day.cq.search.eval.AbstractPredicateEvaluator;
import com.day.cq.search.eval.EvaluationContext;
import javax.jcr.query.Row;
import org.apache.felix.scr.annotations.Component;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.resource.collection.ResourceCollection;

@Component(metatype=0, factory="com.day.cq.search.eval.PredicateEvaluator/memberOf")
public class CollectionPredicateEvaluator
extends AbstractPredicateEvaluator {
    public static final String COLLECTION = "memberOf";

    @Override
    public boolean includes(Predicate p, Row row, EvaluationContext context) {
        if (!p.hasNonEmptyValue("memberOf")) {
            return true;
        }
        Resource colRes = context.getResourceResolver().getResource(p.get("memberOf"));
        if (colRes != null) {
            ResourceCollection collection = (ResourceCollection)colRes.adaptTo(ResourceCollection.class);
            Resource resource = context.getResource(row);
            return collection.contains(resource);
        }
        return false;
    }

    @Override
    public boolean canXpath(Predicate predicate, EvaluationContext context) {
        return false;
    }

    @Override
    public boolean canFilter(Predicate predicate, EvaluationContext context) {
        return true;
    }
}