CampaignsDataSourceServlet.java
6.43 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
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.granite.ui.components.ds.DataSource
* com.adobe.granite.ui.components.ds.SimpleDataSource
* com.adobe.granite.ui.components.ds.ValueMapResource
* com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap
* com.day.cq.commons.inherit.InheritanceValueMap
* com.day.cq.wcm.webservicesupport.Configuration
* com.day.cq.wcm.webservicesupport.ConfigurationManager
* com.day.cq.wcm.webservicesupport.ConfigurationManagerFactory
* javax.servlet.ServletException
* org.apache.sling.api.SlingHttpServletRequest
* org.apache.sling.api.SlingHttpServletResponse
* org.apache.sling.api.resource.AbstractResourceVisitor
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceMetadata
* org.apache.sling.api.resource.ResourceResolver
* org.apache.sling.api.resource.ValueMap
* org.apache.sling.api.servlets.SlingSafeMethodsServlet
* org.apache.sling.api.wrappers.ValueMapDecorator
*/
package com.day.cq.personalization;
import com.adobe.granite.ui.components.ds.DataSource;
import com.adobe.granite.ui.components.ds.SimpleDataSource;
import com.adobe.granite.ui.components.ds.ValueMapResource;
import com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap;
import com.day.cq.commons.inherit.InheritanceValueMap;
import com.day.cq.wcm.webservicesupport.Configuration;
import com.day.cq.wcm.webservicesupport.ConfigurationManager;
import com.day.cq.wcm.webservicesupport.ConfigurationManagerFactory;
import java.io.IOException;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletException;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.AbstractResourceVisitor;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.api.wrappers.ValueMapDecorator;
@Deprecated
public class CampaignsDataSourceServlet
extends SlingSafeMethodsServlet {
private static final String CAMPAIGNPAGE_RESOURCE_TYPE = "cq/personalization/components/campaignpage";
private static final String CAMPAIGNS_ROOT = "/content/campaigns";
private static final String ACTIVITY_TYPE = "campaignType";
private ConfigurationManagerFactory configManagerFactory;
protected void bindConfigManagerFactory(ConfigurationManagerFactory configManagerFactory) {
}
protected void unbindConfigManagerFactory(ConfigurationManagerFactory configManagerFactory) {
}
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
ResourceResolver resolver = request.getResourceResolver();
CampaignsRetriever visitor = new CampaignsRetriever();
visitor.accept(resolver.getResource("/content/campaigns"));
List<Resource> resourceList = visitor.getCampaigns();
final Collator c = Collator.getInstance(request.getLocale());
Collections.sort(resourceList, new Comparator<Resource>(){
@Override
public int compare(Resource r1, Resource r2) {
String t1 = (String)r1.getValueMap().get("text", (Object)"");
String t2 = (String)r2.getValueMap().get("text", (Object)"");
return c.compare(t1, t2);
}
});
request.setAttribute(DataSource.class.getName(), (Object)new SimpleDataSource(resourceList.iterator()));
}
private Configuration getTargetConfiguration(InheritanceValueMap properties, ConfigurationManager cfgMgr) {
String[] services = (String[])properties.getInherited("cq:cloudserviceconfigs", (Object)new String[0]);
if (cfgMgr != null) {
return cfgMgr.getConfiguration("testandtarget", services);
}
return null;
}
class CampaignsRetriever
extends AbstractResourceVisitor {
List<Resource> campaigns;
CampaignsRetriever() {
this.campaigns = new ArrayList<Resource>();
}
protected void visit(Resource resource) {
if ("cq/personalization/components/campaignpage".equals(resource.getResourceType())) {
HierarchyNodeInheritanceValueMap props = new HierarchyNodeInheritanceValueMap(resource);
ResourceResolver resolver = resource.getResourceResolver();
ConfigurationManager cfgMgr = CampaignsDataSourceServlet.this.configManagerFactory.getConfigurationManager(resolver);
Configuration targetConfig = CampaignsDataSourceServlet.this.getTargetConfiguration((InheritanceValueMap)props, cfgMgr);
String activityTitle = (String)props.get("jcr:title", (Object)resource.getParent().getName());
String activityType = (String)props.get("campaignType", (Object)"landingPage");
String activityTypeMarker = "AEM";
boolean isActiveProp = (Boolean)props.get("campaignActive", (Object)true);
Calendar campaignEndTime = (Calendar)props.get("offTime", Calendar.class);
Calendar currentTime = Calendar.getInstance();
boolean isActive = isActiveProp && (campaignEndTime == null || currentTime.before(campaignEndTime));
boolean useActivity = true;
if (targetConfig != null) {
activityTypeMarker = "landingPage".equals(activityType) ? "XT" : "A/B";
useActivity = isActive;
}
if (useActivity) {
final String title = activityTitle + " [" + activityTypeMarker + "]";
final String path = resource.getParent().getPath();
HashMap<String, Object> entry = new HashMap<String, Object>(){};
ValueMapResource vmRes = new ValueMapResource(resolver, new ResourceMetadata(), "", (ValueMap)new ValueMapDecorator((Map)entry));
this.campaigns.add((Resource)vmRes);
}
}
}
public List<Resource> getCampaigns() {
return this.campaigns;
}
}
}