CampaignsOverviewServlet.java 10 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.commons.JSONWriterUtil
 *  com.day.cq.commons.JSONWriterUtil$WriteMode
 *  com.day.cq.commons.TidyJSONWriter
 *  com.day.cq.tagging.Tag
 *  com.day.cq.wcm.api.Page
 *  com.day.cq.wcm.api.Template
 *  com.day.cq.xss.XSSProtectionService
 *  com.day.text.Text
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.RepositoryException
 *  javax.jcr.Value
 *  javax.servlet.ServletException
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.ReferencePolicy
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceUtil
 *  org.apache.sling.api.servlets.SlingSafeMethodsServlet
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.io.JSONWriter
 */
package com.day.cq.mcm.core.servlets;

import com.day.cq.commons.JSONWriterUtil;
import com.day.cq.commons.TidyJSONWriter;
import com.day.cq.tagging.Tag;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.Template;
import com.day.cq.xss.XSSProtectionService;
import com.day.text.Text;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Calendar;
import java.util.Iterator;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.io.JSONWriter;

@Component(metatype=0)
@Service
@Properties(value={@Property(name="sling.servlet.extensions", value={"json"}), @Property(name="sling.servlet.paths", value={"/libs/mcm/campaigns"}), @Property(name="sling.servlet.methods", value={"GET"})})
public class CampaignsOverviewServlet
extends SlingSafeMethodsServlet {
    @Reference(policy=ReferencePolicy.STATIC)
    private XSSProtectionService xss;
    public static final String TIDY_PARAM = "tidy";
    public static final String PATH_PARAM = "path";
    private static final String PATH = "/content/campaigns";
    private static final String TEASER_TYPE = "cq/personalization/components/teaserpage";
    private static final String NEWSLETTER_TYPE = "mcm/components/newsletter/page";
    private static final String CAMPAIGN_NEWSLETTER_TYPE = "mcm/campaign/components/campaign_newsletterpage";

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        try {
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            ResourceResolver resolver = request.getResourceResolver();
            String path = request.getParameter("path") != null ? request.getParameter("path") : "/content/campaigns";
            Resource root = resolver.getResource(path);
            Iterator campaignsRoot = resolver.listChildren(root);
            TidyJSONWriter out = new TidyJSONWriter((Writer)response.getWriter());
            out.setTidy("true".equals(request.getParameter("tidy")));
            out.array();
            while (campaignsRoot.hasNext()) {
                Page campaigns = (Page)((Resource)campaignsRoot.next()).adaptTo(Page.class);
                if (campaigns == null) continue;
                out.object();
                JSONWriterUtil.write((JSONWriter)out, (String)"title", (String)campaigns.getTitle(), (JSONWriterUtil.WriteMode)JSONWriterUtil.WriteMode.BOTH, (XSSProtectionService)this.xss);
                out.key("path").value((Object)campaigns.getPath());
                out.key("teasers");
                out.array();
                Iterator iter = campaigns.listChildren();
                while (iter.hasNext()) {
                    Page teaser = (Page)iter.next();
                    if (!ResourceUtil.isA((Resource)teaser.getContentResource(), (String)"cq/personalization/components/teaserpage")) continue;
                    CampaignsOverviewServlet.renderCampaign(out, resolver, teaser, true, this.xss);
                }
                out.endArray();
                out.key("newsletters");
                out.array();
                Iterator iter2 = campaigns.listChildren();
                while (iter2.hasNext()) {
                    Page newsletter = (Page)iter2.next();
                    if (!ResourceUtil.isA((Resource)newsletter.getContentResource(), (String)"mcm/components/newsletter/page") && !ResourceUtil.isA((Resource)newsletter.getContentResource(), (String)"mcm/campaign/components/campaign_newsletterpage")) continue;
                    CampaignsOverviewServlet.renderCampaign(out, resolver, newsletter, false, this.xss);
                }
                out.endArray();
                out.endObject();
            }
            out.endArray();
        }
        catch (JSONException e) {
            // empty catch block
        }
    }

    private static void renderCampaign(TidyJSONWriter out, ResourceResolver resolver, Page campaign, boolean isTeaser, XSSProtectionService xss) {
        try {
            Tag[] tags;
            out.object();
            JSONWriterUtil.write((JSONWriter)out, (String)"title", (String)campaign.getTitle(), (JSONWriterUtil.WriteMode)JSONWriterUtil.WriteMode.BOTH, (XSSProtectionService)xss);
            String desc = campaign.getDescription();
            JSONWriterUtil.write((JSONWriter)out, (String)"description", (String)(desc == null ? "" : desc), (JSONWriterUtil.WriteMode)JSONWriterUtil.WriteMode.BOTH, (XSSProtectionService)xss);
            out.key("path").value((Object)campaign.getPath());
            out.key("active").value(campaign.isValid());
            Calendar on = campaign.getOnTime();
            out.key("onTime").value((Object)(on != null ? Long.valueOf(on.getTimeInMillis()) : ""));
            Calendar off = campaign.getOffTime();
            out.key("offTime").value((Object)(off != null ? Long.valueOf(off.getTimeInMillis()) : ""));
            out.key("tags");
            out.array();
            for (Tag tag : tags = campaign.getTags()) {
                out.object();
                JSONWriterUtil.write((JSONWriter)out, (String)"fullTitle", (String)tag.getTitlePath(), (JSONWriterUtil.WriteMode)JSONWriterUtil.WriteMode.BOTH, (XSSProtectionService)xss);
                JSONWriterUtil.write((JSONWriter)out, (String)"title", (String)tag.getTitle(), (JSONWriterUtil.WriteMode)JSONWriterUtil.WriteMode.BOTH, (XSSProtectionService)xss);
                out.endObject();
            }
            out.endArray();
            out.key("segments");
            out.array();
            Node node = (Node)campaign.adaptTo(Node.class);
            try {
                javax.jcr.Property segments = node.getNode("jcr:content").getProperty("cq:segments");
                if (segments.isMultiple()) {
                    for (Value segment : segments.getValues()) {
                        String s = segment.getString();
                        out.object();
                        out.key("path").value((Object)s);
                        out.key("title").value((Object)Text.getName((String)s));
                        out.endObject();
                    }
                } else {
                    String s = segments.getString();
                    out.object();
                    out.key("path").value((Object)s);
                    out.key("title").value((Object)Text.getName((String)s));
                    out.endObject();
                }
            }
            catch (RepositoryException re) {
                // empty catch block
            }
            out.endArray();
            if (isTeaser) {
                String imagePath = campaign.getPath() + ".thumb.png";
                Resource imgRes = resolver.getResource(campaign.getPath() + "/jcr:content/par/image");
                if (imgRes != null) {
                    imagePath = imgRes.getPath() + ".img.png";
                } else {
                    imgRes = resolver.getResource(campaign.getPath() + "/jcr:content/par/textimage/image");
                    if (imgRes != null) {
                        imagePath = imgRes.getPath() + ".img.png";
                    }
                }
                out.key("thumbnail").value((Object)imagePath);
            } else {
                Resource imgRes = null;
                String imagePath = campaign.getTemplate().getIconPath();
                if (imagePath != null) {
                    imgRes = resolver.getResource(imagePath);
                }
                if (imgRes == null && (imagePath = campaign.getTemplate().getThumbnailPath()) != null && (imgRes = resolver.getResource(imagePath)) == null) {
                    imagePath = null;
                }
                if (imagePath != null) {
                    out.key("thumbnail").value((Object)imagePath);
                }
            }
            out.endObject();
        }
        catch (JSONException e) {
            // empty catch block
        }
    }

    protected void bindXss(XSSProtectionService xSSProtectionService) {
        this.xss = xSSProtectionService;
    }

    protected void unbindXss(XSSProtectionService xSSProtectionService) {
        if (this.xss == xSSProtectionService) {
            this.xss = null;
        }
    }
}