ProviderSettingsServlet.java 4.76 KB
/*
 * 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;
        }
    }
}