PushWinningExperience.java 5.83 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.google.gson.JsonArray
 *  com.google.gson.JsonElement
 *  com.google.gson.JsonObject
 *  com.google.gson.JsonPrimitive
 *  javax.servlet.ServletException
 *  org.apache.commons.lang.StringUtils
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.analytics.testandtarget.impl.servlets;

import com.day.cq.analytics.testandtarget.TargetMediator;
import com.day.cq.analytics.testandtarget.TestandtargetException;
import com.day.cq.analytics.testandtarget.impl.TargetHelperService;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
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.ValueMap;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SlingServlet(name=" com.day.cq.analytics.testandtarget.impl.servlets.PushWinningExperience", resourceTypes={"cq/personalization/components/campaignpage"}, selectors={"pushwinner"}, methods={"POST"}, extensions={"json"})
public class PushWinningExperience
extends SlingAllMethodsServlet {
    private static final String PARAM_EXPERIENCE_NAME = "experienceName";
    private static final String DEFAULT_EXPERIENCE_NAME = "Default";
    private static final String PN_CAMPAIGN_ACTIVE = "campaignActive";
    private static final Logger LOG = LoggerFactory.getLogger(PushWinningExperience.class);
    @Reference
    private TargetHelperService helperService;
    @Reference
    private TargetMediator targetMediatorService;

    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        Resource campaign = request.getResource().getParent();
        LOG.debug("Request to push winning experience for campaign at {}", (Object)campaign.getPath());
        String experienceName = request.getParameter("experienceName");
        if (StringUtils.isEmpty((String)experienceName)) {
            this.sendError(response, "Parameter experienceName not supplied", 400);
            return;
        }
        ValueMap properties = (ValueMap)request.getResource().adaptTo(ValueMap.class);
        if (!((Boolean)properties.get("campaignActive", (Object)true)).booleanValue()) {
            LOG.debug("Pushing experience not allowed for inactive campaign {}", (Object)campaign.getPath());
            this.sendError(response, "Pushing experience not allowed for inactive campaign!", 400);
            return;
        }
        try {
            List<String> replacedPaths = "Default".equals(experienceName) ? this.helperService.pushDefaultWinningExperience(campaign) : this.helperService.pushWinningExperience(campaign, experienceName);
            LOG.debug("Replaced {} locations", (Object)replacedPaths.size());
            if (replacedPaths.size() > 0) {
                this.targetMediatorService.deactivatePublishCampaign(campaign.getPath());
                this.sendOk(response, replacedPaths);
            } else {
                this.sendError(response, "No content paths have been for any locations in this campaign", 404);
            }
        }
        catch (TestandtargetException e) {
            LOG.error(e.getMessage(), (Throwable)e);
            this.sendError(response, e.getMessage(), 500);
        }
        catch (RuntimeException e) {
            LOG.error(e.getMessage(), (Throwable)e);
            this.sendError(response, e.getMessage(), 500);
        }
    }

    private void sendOk(SlingHttpServletResponse response, List<String> locationPaths) throws IOException {
        JsonObject responseJson = new JsonObject();
        JsonArray arr = new JsonArray();
        for (String l : locationPaths) {
            arr.add((JsonElement)new JsonPrimitive(l));
        }
        responseJson.add("locationPaths", (JsonElement)arr);
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        out.print(responseJson.toString());
    }

    private void sendError(SlingHttpServletResponse response, String message, int responseCode) throws IOException {
        response.setContentType("application/json");
        response.setStatus(responseCode);
        PrintWriter out = response.getWriter();
        JsonObject object = new JsonObject();
        object.addProperty("message", message);
        out.print(object.toString());
    }

    protected void bindHelperService(TargetHelperService targetHelperService) {
        this.helperService = targetHelperService;
    }

    protected void unbindHelperService(TargetHelperService targetHelperService) {
        if (this.helperService == targetHelperService) {
            this.helperService = null;
        }
    }

    protected void bindTargetMediatorService(TargetMediator targetMediator) {
        this.targetMediatorService = targetMediator;
    }

    protected void unbindTargetMediatorService(TargetMediator targetMediator) {
        if (this.targetMediatorService == targetMediator) {
            this.targetMediatorService = null;
        }
    }
}