IsNewsletterPredicate.java 2.8 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Node
 *  javax.jcr.RepositoryException
 *  org.apache.commons.collections.Predicate
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceUtil
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.mcm.core.predicate;

import javax.jcr.Node;
import javax.jcr.RepositoryException;
import org.apache.commons.collections.Predicate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype=0)
@Service(value={Predicate.class})
@Property(name="predicate.name", value={"newsletter"})
public class IsNewsletterPredicate
implements Predicate {
    private final Logger log = LoggerFactory.getLogger(IsNewsletterPredicate.class);
    private final String campaignType = "cq/personalization/components/campaignpage";
    private final String brandType = "mcm/components/brandpage";
    private final String newsletterType = "mcm/components/newsletter/page";
    private final String campaignNewsletterType = "mcm/campaign/components/campaign_newsletterpage";

    public boolean evaluate(Object o) {
        if (o instanceof Resource) {
            Resource r = (Resource)o;
            Resource content = r.getResourceResolver().getResource(r.getPath() + "/" + "jcr:content");
            if (content == null) {
                return false;
            }
            String type = content.getResourceType();
            return this.isValidType(r.getResourceResolver(), type);
        }
        if (o instanceof Node) {
            Node n = (Node)o;
            try {
                return n.isNodeType("nt:hierarchyNode");
            }
            catch (RepositoryException e) {
                this.log.warn("RepositoryException in evaluate()", (Throwable)e);
            }
        }
        return false;
    }

    private boolean isValidType(ResourceResolver rr, String type) {
        if ("mcm/components/brandpage".equals(type) || "cq/personalization/components/campaignpage".equals(type) || "mcm/components/newsletter/page".equals(type) || "mcm/campaign/components/campaign_newsletterpage".equals(type)) {
            return true;
        }
        String supertype = ResourceUtil.getResourceSuperType((ResourceResolver)rr, (String)type);
        return supertype != null && this.isValidType(rr, supertype);
    }
}