VariablesServlet.java 9.17 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.commons.TidyJSONWriter
 *  com.day.cq.wcm.webservicesupport.Configuration
 *  com.day.cq.wcm.webservicesupport.ConfigurationManager
 *  com.day.cq.wcm.webservicesupport.ConfigurationManagerFactory
 *  com.google.gson.FieldNamingPolicy
 *  com.google.gson.Gson
 *  com.google.gson.GsonBuilder
 *  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.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.servlets.SlingSafeMethodsServlet
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.io.JSONWriter
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.analytics.sitecatalyst.impl.servlets;

import com.day.cq.analytics.sitecatalyst.SitecatalystWebservice;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsVariable;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsVariableTitle;
import com.day.cq.analytics.sitecatalyst.impl.util.VariableUtils;
import com.day.cq.commons.TidyJSONWriter;
import com.day.cq.wcm.webservicesupport.Configuration;
import com.day.cq.wcm.webservicesupport.ConfigurationManager;
import com.day.cq.wcm.webservicesupport.ConfigurationManagerFactory;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.List;
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.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.io.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype=0)
@Service
@Properties(value={@Property(name="sling.servlet.extensions", value={"json"}), @Property(name="sling.servlet.paths", value={"/libs/cq/analytics/sitecatalyst/variables"}), @Property(name="sling.servlet.methods", value={"GET"})})
public class VariablesServlet
extends SlingSafeMethodsServlet {
    private static final String TIDY_PARAM = "tidy";
    private static final String FORCE_PARAM = "force";
    private static final String PATH_PARAM = "path";
    private static final String TRAFFIC_VAR_TYPE = "traffic";
    private static final String CONVERSION_VAR_TYPE = "conversion";
    private static final String EVENT_VAR_TYPE = "event";
    private static final AnalyticsVariable[] PREDEFINED_PROPS = new AnalyticsVariable[]{new AnalyticsVariable("channel", "Channel"), new AnalyticsVariable("pageName", "Page Name"), new AnalyticsVariable("pageType", "Page Type"), new AnalyticsVariable("pageURL", "Page URL"), new AnalyticsVariable("server", "Server"), new AnalyticsVariable("hier1", "Hierarchy 1"), new AnalyticsVariable("hier2", "Hierarchy 2"), new AnalyticsVariable("hier3", "Hierarchy 3"), new AnalyticsVariable("hier4", "Hierarchy 4"), new AnalyticsVariable("hier5", "Hierarchy 5")};
    private static final AnalyticsVariable[] PREDEFINED_EVARS = new AnalyticsVariable[]{new AnalyticsVariable("campaign", "Campaign"), new AnalyticsVariable("transactionID", "Transaction ID"), new AnalyticsVariable("visitorID", "Visitor ID"), new AnalyticsVariable("purchaseID", "Purchase ID"), new AnalyticsVariable("products", "Products"), new AnalyticsVariable("product.category", "Product Category"), new AnalyticsVariable("product.sku", "Product SKU"), new AnalyticsVariable("product.quantity", "Product Quantity"), new AnalyticsVariable("product.quantity", "Product Quantity"), new AnalyticsVariable("product.price", "Product Price"), new AnalyticsVariable("state", "State"), new AnalyticsVariable("zip", "ZIP"), new AnalyticsVariable("list1", "Variable List 1"), new AnalyticsVariable("list2", "Variable List 2"), new AnalyticsVariable("list3", "Variable List 3")};
    private static final AnalyticsVariable[] PREDEFINED_EVENTS = new AnalyticsVariable[]{new AnalyticsVariable("prodView", "Product View"), new AnalyticsVariable("scOpen", "Shopping Cart Opened"), new AnalyticsVariable("scView", "Shopping Card Viewed"), new AnalyticsVariable("scAdd", "Product Added"), new AnalyticsVariable("scRemove", "Product Removed"), new AnalyticsVariable("scCheckout", "Shopping Cart Checkout"), new AnalyticsVariable("purchase", "Purchase")};
    private final Logger log;
    private static Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
    @Reference
    private ConfigurationManagerFactory configManagerFactory;
    @Reference
    private SitecatalystWebservice sitecatalyst;

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

    public void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        try {
            String tidy = request.getParameter("tidy");
            String path = request.getParameter("path");
            Boolean force = Boolean.parseBoolean(request.getParameter("force"));
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            TidyJSONWriter json = new TidyJSONWriter((Writer)response.getWriter());
            json.setTidy("true".equals(tidy));
            json.object();
            json.key("variables").array();
            Configuration config = this.configManagerFactory.getConfigurationManager(request.getResourceResolver()).getConfiguration(this.cleanPath(path));
            if (config != null) {
                AnalyticsVariable[] trafficVariables = VariableUtils.getAndUpdateTrafficVariables(config, this.sitecatalyst, force);
                AnalyticsVariable[] conversionVariables = VariableUtils.getAndUpdateConversionVariables(config, this.sitecatalyst, force);
                AnalyticsVariable[] events = VariableUtils.getAndUpdateEventVariables(config, this.sitecatalyst, force);
                VariableUtils.getAndUpdateMetrics(config, this.sitecatalyst, force);
                this.writeVariables(request, (JSONWriter)json, PREDEFINED_PROPS, "traffic");
                this.writeVariables(request, (JSONWriter)json, PREDEFINED_EVARS, "conversion");
                this.writeVariables(request, (JSONWriter)json, PREDEFINED_EVENTS, "event");
                this.writeVariables(request, (JSONWriter)json, trafficVariables, "traffic");
                this.writeVariables(request, (JSONWriter)json, conversionVariables, "conversion");
                this.writeVariables(request, (JSONWriter)json, events, "event");
            }
            json.endArray();
            json.endObject();
        }
        catch (Exception e) {
            this.log.error("Exception occurred while calling SiteCatalyst service", (Throwable)e);
            throw new ServletException("Exception occurred while calling SiteCatalyst service", (Throwable)e);
        }
    }

    private void writeVariables(SlingHttpServletRequest request, JSONWriter json, AnalyticsVariable[] variablesJson, String variableType) throws JSONException {
        if (variablesJson != null) {
            for (AnalyticsVariable variable : variablesJson) {
                json.object();
                json.key("path").value((Object)request.getRequestURI());
                json.key("name").value((Object)variable.getId());
                json.key("title").value((Object)gson.toJson(variable.getTitles()));
                json.key("type").value((Object)variableType);
                if (!variable.isEnabled()) {
                    json.key("disabled").value(true);
                }
                json.endObject();
            }
        }
    }

    private String cleanPath(String path) {
        int idx;
        if (path != null && (idx = path.indexOf(".html")) > -1) {
            return path.substring(0, idx);
        }
        return path != null ? path : "";
    }

    protected void bindConfigManagerFactory(ConfigurationManagerFactory configurationManagerFactory) {
        this.configManagerFactory = configurationManagerFactory;
    }

    protected void unbindConfigManagerFactory(ConfigurationManagerFactory configurationManagerFactory) {
        if (this.configManagerFactory == configurationManagerFactory) {
            this.configManagerFactory = null;
        }
    }

    protected void bindSitecatalyst(SitecatalystWebservice sitecatalystWebservice) {
        this.sitecatalyst = sitecatalystWebservice;
    }

    protected void unbindSitecatalyst(SitecatalystWebservice sitecatalystWebservice) {
        if (this.sitecatalyst == sitecatalystWebservice) {
            this.sitecatalyst = null;
        }
    }
}