WhitelistBlacklistServlet.java 4.69 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  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.RequestParameter
 *  org.apache.sling.api.request.RequestParameterMap
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.JSONObject
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.granite.offloading.impl.servlets;

import com.adobe.granite.offloading.api.OffloadingException;
import com.adobe.granite.offloading.api.OffloadingTopicManager;
import com.adobe.granite.offloading.api.TopicConfigurationAction;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.HashSet;
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.RequestParameter;
import org.apache.sling.api.request.RequestParameterMap;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SlingServlet(selectors={"config"}, resourceTypes={"granite/offloading/components/view"}, methods={"POST"}, extensions={"html"})
public class WhitelistBlacklistServlet
extends SlingAllMethodsServlet {
    private static final Logger LOG = LoggerFactory.getLogger(WhitelistBlacklistServlet.class);
    static final String SLING_ID = "slingID";
    @Reference
    private OffloadingTopicManager otm;

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json");
        try {
            String instanceID;
            RequestParameterMap rpm = request.getRequestParameterMap();
            if (rpm.isEmpty()) {
                throw new OffloadingException("No configuration request parameters have been sent.");
            }
            RequestParameter slingID = rpm.getValue("slingID");
            if (slingID == null || StringUtils.isEmpty((String)(instanceID = slingID.getString()))) {
                throw new OffloadingException("The request doesn't contain a slingID parameter.");
            }
            if (rpm.size() < 2) {
                throw new OffloadingException("The request doesn't contain any configuration parameters.");
            }
            HashMap<TopicConfigurationAction, Set<String>> configuration = new HashMap<TopicConfigurationAction, Set<String>>();
            for (String paramName : rpm.keySet()) {
                if (!paramName.startsWith("config:")) continue;
                String topic = paramName.substring(7);
                String action = rpm.getValue(paramName).getString();
                TopicConfigurationAction tca = TopicConfigurationAction.getAction(action);
                if (tca == null) continue;
                Set<String> actionSet = configuration.get((Object)tca);
                if (actionSet == null) {
                    actionSet = new HashSet<String>();
                    configuration.put(tca, actionSet);
                }
                actionSet.add(topic);
            }
            this.otm.configureInstance(instanceID, configuration);
        }
        catch (OffloadingException e) {
            LOG.error("Unable to perform instance whitelist/blacklist configuration.", (Throwable)e);
            PrintWriter out = response.getWriter();
            JSONObject json = new JSONObject();
            try {
                json.put("error", (Object)"Unable to perform instance whitelist/blacklist configuration.");
            }
            catch (JSONException je) {}
            finally {
                out.print(json.toString());
                response.setStatus(400);
            }
        }
    }

    protected void bindOtm(OffloadingTopicManager offloadingTopicManager) {
        this.otm = offloadingTopicManager;
    }

    protected void unbindOtm(OffloadingTopicManager offloadingTopicManager) {
        if (this.otm == offloadingTopicManager) {
            this.otm = null;
        }
    }
}