ProfileRetrieverImpl.java
5.48 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
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.day.cq.wcm.webservicesupport.Configuration
* org.apache.felix.scr.annotations.Component
* org.apache.felix.scr.annotations.Reference
* org.apache.felix.scr.annotations.Service
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceUtil
* org.apache.sling.api.resource.ValueMap
* org.apache.sling.commons.json.JSONException
* org.apache.sling.commons.json.JSONObject
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.day.cq.mcm.campaign.profile.impl;
import com.day.cq.mcm.campaign.ACConnectorException;
import com.day.cq.mcm.campaign.CallResults;
import com.day.cq.mcm.campaign.CampaignConnector;
import com.day.cq.mcm.campaign.CampaignCredentials;
import com.day.cq.mcm.campaign.ConfigurationException;
import com.day.cq.mcm.campaign.profile.CampaignMetaData;
import com.day.cq.mcm.campaign.profile.MetaDataInstance;
import com.day.cq.mcm.campaign.profile.Profile;
import com.day.cq.mcm.campaign.profile.ProfileRetriever;
import com.day.cq.mcm.campaign.profile.impl.ProfileImpl;
import com.day.cq.wcm.webservicesupport.Configuration;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Deprecated
@Service
@Component(metatype=0)
public class ProfileRetrieverImpl
implements ProfileRetriever {
@Reference
private CampaignConnector connector;
private final Logger log;
public ProfileRetrieverImpl() {
this.log = LoggerFactory.getLogger(this.getClass());
}
private String getJSON(Resource page, String encryptedPK) throws ACConnectorException {
String json;
Resource resource = page.getChild("jcr:content");
if (resource == null) {
throw new ConfigurationException("Missing 'jcr:content' child node (path: " + page.getPath() + ").");
}
Configuration config = this.connector.getWebserviceConfig(page);
CampaignCredentials credentials = this.connector.retrieveCredentials(config);
ValueMap values = ResourceUtil.getValueMap((Resource)resource);
String mappingId = (String)values.get("acMapping", String.class);
if (mappingId == null) {
throw new ConfigurationException("Missing delivery mapping on page.");
}
HashMap<String, String> parameters = new HashMap<String, String>(4);
parameters.put("mapping", mappingId);
parameters.put("resource", mappingId);
parameters.put("encryptedPK", encryptedPK);
CallResults results = null;
try {
results = this.connector.callFunction("amcGetProfile.jssp", parameters, credentials);
json = results.bodyAsString();
}
catch (IOException ioe) {
throw new ACConnectorException("Could not determine response body.", ioe);
}
finally {
if (results != null) {
results.destroy();
}
}
return json;
}
private void parseJSON(Profile profile, JSONObject jsonObj, CampaignMetaData metaData, String prefix) throws ACConnectorException {
try {
Iterator keys = jsonObj.keys();
while (keys.hasNext()) {
String key = (String)keys.next();
Object value = jsonObj.get(key);
if (value instanceof JSONObject) {
JSONObject objValue = (JSONObject)value;
String childPrefix = prefix + key + ".";
this.parseJSON(profile, objValue, metaData, childPrefix);
continue;
}
MetaDataInstance dataInstance = metaData.getData(prefix + key);
if (dataInstance == null) {
throw new ACConnectorException("Mismatch between Campaign meta data and profile data: " + prefix + key);
}
profile.setValue(dataInstance, jsonObj.get(key));
}
}
catch (JSONException je) {
throw new ACConnectorException("Could not parse JSON", (Throwable)je);
}
}
private Profile parseJSON(String json, CampaignMetaData metaData) throws ACConnectorException {
try {
ProfileImpl profile = new ProfileImpl();
JSONObject jsonObject = new JSONObject(json);
this.parseJSON(profile, jsonObject, metaData, "");
return profile;
}
catch (JSONException je) {
throw new ACConnectorException("Could not parse JSON", (Throwable)je);
}
}
@Override
public Profile load(Resource page, String encryptedPK, CampaignMetaData metaData) throws ACConnectorException {
String json = this.getJSON(page, encryptedPK);
return this.parseJSON(json, metaData);
}
protected void bindConnector(CampaignConnector campaignConnector) {
this.connector = campaignConnector;
}
protected void unbindConnector(CampaignConnector campaignConnector) {
if (this.connector == campaignConnector) {
this.connector = null;
}
}
}