VariableUtils.java 11 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.wcm.webservicesupport.Configuration
 *  com.google.gson.FieldNamingPolicy
 *  com.google.gson.Gson
 *  com.google.gson.GsonBuilder
 *  javax.annotation.Nonnull
 *  javax.annotation.Nullable
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  org.apache.sling.api.resource.Resource
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.analytics.sitecatalyst.impl.util;

import com.day.cq.analytics.sitecatalyst.SitecatalystException;
import com.day.cq.analytics.sitecatalyst.SitecatalystUtil;
import com.day.cq.analytics.sitecatalyst.SitecatalystWebservice;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsEvar;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsEvent;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsReportSuiteEvars;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsReportSuiteEvents;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsReportSuiteProps;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsReportSuiteVariables;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsVariable;
import com.day.cq.analytics.sitecatalyst.impl.model.AnalyticsVariableTitle;
import com.day.cq.wcm.webservicesupport.Configuration;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Calendar;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.sling.api.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class VariableUtils {
    public static final Integer HOURS_CACHEEXPIRATION = -1;
    public static final String PN_CACHEDATE = "cacheDate";
    public static final String PN_METRICS = "metrics";
    public static final String PN_TRAFFIC = "traffic";
    public static final String PN_CONVERSION = "conversion";
    public static final String PN_EVENT = "event";
    private static final Logger log = LoggerFactory.getLogger(VariableUtils.class);
    private static Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();

    public static String getAndUpdateMetrics(Configuration config, SitecatalystWebservice sitecatalyst, Boolean force) {
        String response = "";
        Boolean isCached = VariableUtils.hasCache(config, "metrics");
        if (!force.booleanValue() && isCached.booleanValue()) {
            response = (String)config.getInherited("metrics", (Object)null);
        } else {
            try {
                String reportSuite = SitecatalystUtil.getPublishPreferredReportSuite(config);
                if (reportSuite != null) {
                    response = sitecatalyst.getMetrics(config, reportSuite);
                    VariableUtils.setProperty(config, "metrics", response);
                }
            }
            catch (SitecatalystException e) {
                log.error(e.getMessage(), (Throwable)e);
            }
        }
        return response;
    }

    @Nullable
    public static AnalyticsVariable[] getAndUpdateTrafficVariables(@Nonnull Configuration config, @Nonnull SitecatalystWebservice sitecatalyst, @Nonnull Boolean force) {
        String response;
        AnalyticsVariable[] analyticsVariables = null;
        Boolean isCached = VariableUtils.hasCache(config, "traffic");
        if (!force.booleanValue() && isCached.booleanValue()) {
            response = (String)config.getInherited("traffic", (Object)null);
            try {
                analyticsVariables = (AnalyticsVariable[])gson.fromJson(response, AnalyticsEvent[].class);
            }
            catch (Exception e) {
                log.debug("Can't deserialize the cached traffic variables!", (Throwable)e);
            }
        }
        if (analyticsVariables == null) {
            try {
                String reportSuite = (String)config.getInherited("reportsuite", (Object)null);
                if (reportSuite != null) {
                    response = sitecatalyst.getTrafficVars(config, reportSuite);
                    AnalyticsReportSuiteVariables[] analyticsReportSuiteEvents = (AnalyticsReportSuiteProps[])gson.fromJson(response, AnalyticsReportSuiteProps[].class);
                    analyticsVariables = VariableUtils.getMergedAnalyticsVariables(analyticsReportSuiteEvents);
                    VariableUtils.setProperty(config, "traffic", gson.toJson((Object)analyticsVariables));
                }
            }
            catch (SitecatalystException e) {
                log.error(e.getMessage(), (Throwable)e);
            }
        }
        return analyticsVariables;
    }

    @Nullable
    public static AnalyticsVariable[] getAndUpdateConversionVariables(@Nonnull Configuration config, @Nonnull SitecatalystWebservice sitecatalyst, @Nonnull Boolean force) {
        String response;
        AnalyticsVariable[] analyticsEvars = null;
        Boolean isCached = VariableUtils.hasCache(config, "conversion");
        if (!force.booleanValue() && isCached.booleanValue()) {
            response = (String)config.getInherited("conversion", (Object)null);
            try {
                analyticsEvars = (AnalyticsVariable[])gson.fromJson(response, AnalyticsEvar[].class);
            }
            catch (Exception e) {
                log.debug("Can't deserialize the cached conversion variables!", (Throwable)e);
            }
        }
        if (analyticsEvars == null) {
            try {
                String reportSuite = (String)config.getInherited("reportsuite", (Object)null);
                if (reportSuite != null) {
                    response = sitecatalyst.getEvars(config, reportSuite);
                    AnalyticsReportSuiteVariables[] analyticsReportSuiteEvars = (AnalyticsReportSuiteEvars[])gson.fromJson(response, AnalyticsReportSuiteEvars[].class);
                    analyticsEvars = VariableUtils.getMergedAnalyticsVariables(analyticsReportSuiteEvars);
                    VariableUtils.setProperty(config, "conversion", gson.toJson((Object)analyticsEvars));
                }
            }
            catch (SitecatalystException e) {
                log.error(e.getMessage(), (Throwable)e);
            }
        }
        return analyticsEvars;
    }

    @Nullable
    public static AnalyticsVariable[] getAndUpdateEventVariables(@Nonnull Configuration config, @Nonnull SitecatalystWebservice sitecatalyst, @Nonnull Boolean force) {
        String response;
        AnalyticsVariable[] analyticsVariables = null;
        Boolean isCached = VariableUtils.hasCache(config, "event");
        if (!force.booleanValue() && isCached.booleanValue()) {
            response = (String)config.getInherited("event", (Object)null);
            try {
                analyticsVariables = (AnalyticsVariable[])gson.fromJson(response, AnalyticsEvent[].class);
            }
            catch (Exception e) {
                log.debug("Can't deserialize the cached event variables!", (Throwable)e);
            }
        }
        if (analyticsVariables == null) {
            try {
                String reportSuite = (String)config.getInherited("reportsuite", (Object)null);
                if (reportSuite != null) {
                    response = sitecatalyst.getSuccessEvents(config, reportSuite);
                    AnalyticsReportSuiteVariables[] analyticsReportSuiteEvents = (AnalyticsReportSuiteEvents[])gson.fromJson(response, AnalyticsReportSuiteEvents[].class);
                    analyticsVariables = VariableUtils.getMergedAnalyticsVariables(analyticsReportSuiteEvents);
                    VariableUtils.setProperty(config, "event", gson.toJson((Object)analyticsVariables));
                }
            }
            catch (SitecatalystException e) {
                log.error(e.getMessage(), (Throwable)e);
            }
        }
        return analyticsVariables;
    }

    @Nonnull
    private static AnalyticsVariable[] getMergedAnalyticsVariables(@Nonnull AnalyticsReportSuiteVariables[] analyticsReportSuiteVariables) {
        LinkedHashMap<String, AnalyticsVariable> variableMap = new LinkedHashMap<String, AnalyticsVariable>();
        for (AnalyticsReportSuiteVariables analyticsReportSuiteVariable : analyticsReportSuiteVariables) {
            String reportSuiteID = analyticsReportSuiteVariable.getRsid();
            for (AnalyticsVariable analyticsVariable : analyticsReportSuiteVariable.getVariables()) {
                AnalyticsVariableTitle[] mergedTitles;
                AnalyticsVariable mergedVariable = (AnalyticsVariable)variableMap.get(analyticsVariable.getId());
                if (mergedVariable == null) {
                    analyticsVariable.getTitles().add(new AnalyticsVariableTitle(analyticsVariable.getName(), reportSuiteID));
                    variableMap.put(analyticsVariable.getId(), analyticsVariable);
                    continue;
                }
                List<AnalyticsVariableTitle> analyticsVariableTitleList = mergedVariable.getTitles();
                for (AnalyticsVariableTitle title : mergedTitles = analyticsVariableTitleList.toArray(new AnalyticsVariableTitle[analyticsVariableTitleList.size()])) {
                    if (title.getName().equals(analyticsVariable.getName())) {
                        if (title.getRsid().contains(reportSuiteID)) continue;
                        title.setRsid(title.getRsid() + "," + reportSuiteID);
                        continue;
                    }
                    analyticsVariableTitleList.add(new AnalyticsVariableTitle(analyticsVariable.getName(), reportSuiteID));
                }
            }
        }
        return variableMap.values().toArray(new AnalyticsVariable[variableMap.size()]);
    }

    private static Boolean hasCache(Configuration config, String cacheProperty) {
        String cache = (String)config.getInherited(cacheProperty, (Object)null);
        Calendar cacheDate = (Calendar)config.getInherited("cacheDate", (Object)null);
        if (cache == null || cacheDate == null) {
            return Boolean.FALSE;
        }
        Calendar cacheTreshold = Calendar.getInstance();
        cacheTreshold.add(10, HOURS_CACHEEXPIRATION);
        if (cache != null && cacheDate.before(cacheTreshold)) {
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }

    private static void setProperty(Configuration config, String property, String value) {
        Node node = (Node)config.getContentResource().adaptTo(Node.class);
        try {
            node.setProperty(property, value);
            node.setProperty("cacheDate", Calendar.getInstance());
            node.getSession().save();
        }
        catch (RepositoryException e) {
            try {
                node.getSession().refresh(false);
            }
            catch (RepositoryException ignore) {
                log.error(e.getMessage(), (Throwable)e);
            }
        }
    }
}