AbstractSubscriptionServlet.java 5.76 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.i18n.I18n
 *  com.day.cq.wcm.api.Page
 *  com.day.cq.wcm.api.PageManager
 *  com.day.cq.wcm.webservicesupport.Configuration
 *  javax.servlet.ServletException
 *  javax.servlet.http.HttpServletRequest
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.mcm.campaign.servlets;

import com.day.cq.i18n.I18n;
import com.day.cq.mcm.campaign.CallResults;
import com.day.cq.mcm.campaign.CampaignConnector;
import com.day.cq.mcm.campaign.CampaignCredentials;
import com.day.cq.mcm.campaign.CampaignException;
import com.day.cq.mcm.campaign.ConnectionException;
import com.day.cq.mcm.campaign.servlets.AbstractProfileServlet;
import com.day.cq.mcm.campaign.servlets.util.EncryptedPKParameter;
import com.day.cq.mcm.campaign.servlets.util.ParameterMapper;
import com.day.cq.mcm.campaign.servlets.util.SubscriptionParameters;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import com.day.cq.wcm.webservicesupport.Configuration;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;

abstract class AbstractSubscriptionServlet
extends AbstractProfileServlet {
    protected final Logger log;

    AbstractSubscriptionServlet() {
        this.log = LoggerFactory.getLogger(this.getClass());
    }

    protected void doRequest(String fn, CampaignConnector connector, Page page, Map<String, String> parameters, Iterator<String> subscriptions) throws CampaignException {
        Resource resource = page.getContentResource();
        Configuration config = connector.getWebserviceConfig(resource);
        CampaignCredentials credentials = connector.retrieveCredentials(config);
        while (subscriptions.hasNext()) {
            String subscription = subscriptions.next();
            CallResults callResults = null;
            try {
                parameters.put("serviceId", subscription);
                callResults = connector.postFunction(fn, parameters, credentials);
                continue;
            }
            catch (ConnectionException e) {
                if (e.getStatusCode() == 404) {
                    this.log.warn("Could not subscribe; unknown user or service.");
                }
                this.log.warn("Could not execute subscription for service '{}'", (Object)subscription);
                throw e;
            }
            finally {
                if (callResults == null) continue;
                callResults.destroy();
                continue;
            }
        }
    }

    protected abstract void execute(Page var1, Map<String, String> var2, Iterator<String> var3) throws CampaignException;

    protected void doPost(SlingHttpServletRequest req, SlingHttpServletResponse resp) throws ServletException, IOException {
        EncryptedPKParameter epkp;
        if (this.isErrorHandling(req)) {
            return;
        }
        I18n i18n = new I18n((HttpServletRequest)req);
        String formPath = req.getParameter(":formstart");
        if (formPath == null) {
            this.handleError(req, resp, null, i18n.get("Missing parameter '{0}'.", null, new Object[]{":formstart"}));
            return;
        }
        ResourceResolver resolver = req.getResourceResolver();
        Resource form = resolver.getResource(formPath);
        if (form == null) {
            this.handleError(req, resp, form, i18n.get("Could not determine form '{0}'.", null, new Object[]{formPath}));
            return;
        }
        PageManager pageManager = (PageManager)req.getResourceResolver().adaptTo(PageManager.class);
        Page page = pageManager.getContainingPage(formPath);
        try {
            ParameterMapper mapper = new ParameterMapper();
            mapper.parseParameters(req, form);
            epkp = mapper.getEncryptedPKParameter();
            LinkedHashMap<String, String> parameters = new LinkedHashMap<String, String>();
            mapper.addEncryptedPK(parameters);
            mapper.addReconciliationKey(parameters, false);
            SubscriptionParameters subscriptPrms = new SubscriptionParameters();
            subscriptPrms.parseParameters(req, form);
            Iterator<String> subscriptions = subscriptPrms.getSubscriptions();
            this.execute(page, parameters, subscriptions);
        }
        catch (CampaignException e) {
            this.log.error("Could not execute subscription request.", (Throwable)e);
            this.handleError(req, resp, form, i18n.get("Could not (un)subscribe."));
            return;
        }
        String redirect = req.getParameter(":redirect");
        if (redirect == null) {
            String epkpValue;
            redirect = page.getPath() + ".html";
            if (epkp != null && (epkpValue = epkp.getValue()) != null && epkpValue.length() > 0) {
                try {
                    redirect = redirect + "?" + epkp.getName() + "=" + URLEncoder.encode(epkp.getValue(), "UTF-8") + "&cq_ck=" + new Date().getTime();
                }
                catch (UnsupportedEncodingException uee) {
                    // empty catch block
                }
            }
        }
        resp.sendRedirect(redirect);
    }
}