All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazon.redshift.plugin.httpserver.RequestHandler Maven / Gradle / Ivy

There is a newer version: 2.1.0.30
Show newest version
package com.amazon.redshift.plugin.httpserver;

import org.apache.http.*;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpRequestHandler;

import java.io.IOException;
import java.util.List;
import java.util.function.Function;

/**
 * Post http request handler.
 * Responsible on showing "Complete request" page.
 */
public class RequestHandler implements HttpRequestHandler
{
    /**
     * String containing the path.
     */
    public static final String REDSHIFT_PATH = "/redshift/";

    /**
     * String containing the supported Rest API.
     */
    private static final String SUPPORTED_METHOD = "POST";

    /**
     * Instance of Function.
     */
    private final Function, Object> m_requestProcessLogic;

    /**
     * Instance of HttpRequestHandler for invalid requests.
     */
    private final HttpRequestHandler m_invalidRequestHandler;

    /**
     * Instance of HttpRequestHandler for valid requests.
     */
    private final HttpRequestHandler m_validRequestHandler;

    /**
     * Result object.
     */
    private Object m_result;

    /**
     * Constructor.
     *
     * @param requestProcessLogic  Function with List of NameValuePair.
     */
    public RequestHandler(Function, Object> requestProcessLogic)
    {
        this.m_requestProcessLogic = requestProcessLogic;
        this.m_invalidRequestHandler = new InvalidHttpRequestHandler();
        this.m_validRequestHandler = new ValidHttpRequestHandler();
    }

    @Override
    public void handle(HttpRequest request, HttpResponse response, HttpContext context)
        throws HttpException, IOException
    {
        if (isRequestValid(request))
        {
            m_result = m_requestProcessLogic.apply(
                URLEncodedUtils.parse(((BasicHttpEntityEnclosingRequest) request).getEntity()));
            m_validRequestHandler.handle(request, response, context);
        }
        else
        {
            m_invalidRequestHandler.handle(request, response, context);
        }
    }

    /**
     * Check METHOD and path.
     *
     * @param request {@linkplain HttpRequest}
     */
    private boolean isRequestValid(HttpRequest request)
    {
        RequestLine requestLine = request.getRequestLine();
        if (!SUPPORTED_METHOD.equalsIgnoreCase(requestLine.getMethod()))
        {
            return false;
        }
        return requestLine.getUri().startsWith(REDSHIFT_PATH);
    }

    /**
     * @return the result object.
     */
    public Object getResult()
    {
        return m_result;
    }

    /**
     * @return true if result is not null.
     */
    public boolean hasResult()
    {
        return m_result != null;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy