ProviderSettingsServlet.java
4.76 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
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.day.cq.commons.TidyJSONWriter
* javax.servlet.ServletException
* org.apache.commons.lang.StringUtils
* org.apache.felix.scr.annotations.Reference
* org.apache.felix.scr.annotations.sling.SlingServlet
* org.apache.sling.api.SlingHttpServletRequest
* org.apache.sling.api.SlingHttpServletResponse
* org.apache.sling.api.request.RequestPathInfo
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceResolver
* org.apache.sling.api.resource.ValueMap
* org.apache.sling.api.servlets.SlingSafeMethodsServlet
* org.apache.sling.commons.json.JSONException
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.cq.contentinsight.impl.servlets;
import com.adobe.cq.contentinsight.ProviderSettingsManager;
import com.day.cq.commons.TidyJSONWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.Resource;
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.commons.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SlingServlet(generateComponent=1, resourceTypes={"cq/contentinsight/providersettings"}, extensions={"json"}, methods={"GET"})
public class ProviderSettingsServlet
extends SlingSafeMethodsServlet {
private static final long serialVersionUID = 370593776325765781L;
private final Logger log;
@Reference
private ProviderSettingsManager providerSettingsManager;
public ProviderSettingsServlet() {
this.log = LoggerFactory.getLogger(this.getClass());
}
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
Resource resource;
ValueMap settings = null;
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
String suffix = request.getRequestPathInfo().getSuffix();
if (suffix != null && (resource = request.getResourceResolver().resolve(suffix)) != null) {
settings = this.providerSettingsManager.getProviderSettings(resource);
settings.put((Object)"locale", (Object)this.getFullLocale(request));
}
try {
TidyJSONWriter json = new TidyJSONWriter((Writer)response.getWriter());
this.writeJson(json, settings);
}
catch (JSONException e) {
this.log.error("Unexpected error while writing provider settings", (Throwable)e);
throw new ServletException((Throwable)e);
}
}
private void writeJson(TidyJSONWriter json, ValueMap values) throws JSONException {
json.object();
for (String key : values.keySet()) {
if (values.get((Object)key) instanceof Map) {
json.key(key);
this.writeJson(json, (ValueMap)values.get((Object)key));
continue;
}
json.key(key).value(values.get((Object)key));
}
json.endObject();
}
private String getFullLocale(SlingHttpServletRequest request) {
String defaultCountry;
String[] defaultContryTokens;
ValueMap languageProperties;
ResourceResolver resolver = request.getResourceResolver();
Locale languageLocale = request.getLocale();
Resource languageResource = resolver.getResource("wcm/core/resources/languages/" + languageLocale);
if (languageResource != null && !StringUtils.isBlank((String)(defaultCountry = (String)(languageProperties = (ValueMap)languageResource.adaptTo(ValueMap.class)).get("defaultCountry", String.class))) && (defaultContryTokens = defaultCountry.split("_")).length == 2) {
return new Locale(defaultContryTokens[0], defaultContryTokens[1]).toString();
}
return languageLocale.toString();
}
protected void bindProviderSettingsManager(ProviderSettingsManager providerSettingsManager) {
this.providerSettingsManager = providerSettingsManager;
}
protected void unbindProviderSettingsManager(ProviderSettingsManager providerSettingsManager) {
if (this.providerSettingsManager == providerSettingsManager) {
this.providerSettingsManager = null;
}
}
}