AbstractProfileServlet.java 4.39 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.servlet.RequestDispatcher
 *  javax.servlet.ServletException
 *  javax.servlet.ServletRequest
 *  javax.servlet.ServletResponse
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.request.RequestDispatcherOptions
 *  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.SlingAllMethodsServlet
 *  org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.mcm.campaign.servlets;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestDispatcherOptions;
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.SlingAllMethodsServlet;
import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

abstract class AbstractProfileServlet
extends SlingAllMethodsServlet {
    public static final String PN_ERROR_PAGE = "acErrorPage";
    public static final String PN_ERROR_MODE = "acErrorMode";
    protected final Logger log;

    AbstractProfileServlet() {
        this.log = LoggerFactory.getLogger(this.getClass());
    }

    protected void handleError(SlingHttpServletRequest request, SlingHttpServletResponse response, Resource form, String errMsg) throws IOException, ServletException {
        if (request.getResource().isResourceType("mcm/campaign/components/profile")) {
            response.sendError(500, errMsg);
            return;
        }
        if (form != null) {
            ValueMap props = (ValueMap)form.adaptTo(ValueMap.class);
            String errorPage = (String)props.get("acErrorPage", String.class);
            if (errorPage != null) {
                request.setAttribute("BACKEND_ERROR", (Object)errMsg);
                String errorMode = (String)props.get("acErrorMode", String.class);
                if ("forward".equals(errorMode)) {
                    ResourceResolver resolver = request.getResourceResolver();
                    Resource errorResource = resolver.getResource(errorPage);
                    RequestDispatcherOptions options = new RequestDispatcherOptions();
                    options.setReplaceSelectors("");
                    RequestDispatcher dispatcher = request.getRequestDispatcher(errorResource, options);
                    SlingHttpServletRequestWrapper wrappedRequest = new SlingHttpServletRequestWrapper(request){

                        public String getMethod() {
                            return "GET";
                        }
                    };
                    dispatcher.forward((ServletRequest)wrappedRequest, (ServletResponse)response);
                } else {
                    String redirectUrl = errorPage;
                    int lastDotPos = redirectUrl.lastIndexOf(".");
                    if (lastDotPos >= 0) {
                        int lastPathSepPos = redirectUrl.lastIndexOf("/");
                        if (lastDotPos < lastPathSepPos) {
                            redirectUrl = redirectUrl + ".html";
                        }
                    } else {
                        redirectUrl = redirectUrl + ".html";
                    }
                    response.sendRedirect(redirectUrl);
                }
            } else {
                response.sendError(500, errMsg);
            }
        } else {
            response.sendError(500, errMsg);
        }
    }

    protected boolean isErrorHandling(SlingHttpServletRequest request) {
        String[] selectors = request.getRequestPathInfo().getSelectors();
        if (selectors == null) {
            return false;
        }
        for (String selector : selectors) {
            if (!selector.equals("error")) continue;
            return true;
        }
        return false;
    }

}