VariablesServlet.java
9.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
* 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;
}
}
}