org.esigate.MockRequestExecutor.java Source code

Java tutorial

Introduction

Here is the source code for org.esigate.MockRequestExecutor.java

Source

/* 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.esigate;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Properties;

import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.esigate.events.EventManager;
import org.esigate.http.ContentTypeHelper;
import org.esigate.http.OutgoingRequest;
import org.esigate.impl.DriverRequest;
import org.esigate.test.http.HttpResponseBuilder;

public final class MockRequestExecutor implements RequestExecutor {
    public Driver getDriver() {
        return driver;
    }

    private Driver driver;

    public static class MockDriverBuilder implements RequestExecutorBuilder {
        private MockRequestExecutor mockDriver = new MockRequestExecutor();

        @Override
        public RequestExecutorBuilder setEventManager(EventManager eventManager) {
            return this;
        }

        @Override
        public RequestExecutorBuilder setDriver(Driver driver) {
            mockDriver.driver = driver;
            return this;
        }

        @Override
        public RequestExecutorBuilder setProperties(Properties properties) {
            return this;
        }

        public void addResource(String relUrl, String content) {
            mockDriver.addResource(relUrl, content);
        }

        @Override
        public RequestExecutor build() {
            return mockDriver;
        }

        @Override
        public RequestExecutorBuilder setContentTypeHelper(ContentTypeHelper contentTypeHelper) {
            return this;
        }

    }

    private final HashMap<String, String> resources = new HashMap<String, String>();

    private MockRequestExecutor() {
    }

    private static Properties getDefaultProperties() {
        Properties defaultProperties = new Properties();
        defaultProperties.put(Parameters.REMOTE_URL_BASE.getName(), "http://localhost");
        return defaultProperties;
    }

    public void addResource(String relUrl, String content) {
        if (relUrl.startsWith("http://") || relUrl.startsWith("http://")) {
            resources.put(relUrl, content);
        } else {
            String url = "http://localhost";
            if (!relUrl.isEmpty() && !relUrl.startsWith("/")) {
                url = url + "/";
            }
            url = url + relUrl;
            resources.put(url, content);
        }
    }

    private CloseableHttpResponse getResource(String url) throws HttpErrorPage {
        String result = resources.get(url);

        if (result == null) {
            throw new HttpErrorPage(HttpStatus.SC_NOT_FOUND, "Not found", "The page: " + url + " does not exist");
        }
        try {
            return new HttpResponseBuilder().status(HttpStatus.SC_OK).reason("OK").entity(result).build();
        } catch (UnsupportedEncodingException e) {
            throw new HttpErrorPage(HttpStatus.SC_INTERNAL_SERVER_ERROR, e.toString(), e.toString());
        }
    }

    @Override
    public OutgoingRequest createOutgoingRequest(DriverRequest originalRequest, String url, boolean b) {
        OutgoingRequest outgoingRequest = new OutgoingRequest("GET", url,
                originalRequest.getOriginalRequest().getProtocolVersion(), originalRequest, null, null);
        return outgoingRequest;
    }

    @Override
    public CloseableHttpResponse execute(OutgoingRequest outgoingRequest) throws HttpErrorPage {
        return getResource(outgoingRequest.getRequestLine().getUri());
    }

    public static MockRequestExecutor createMockDriver(String name) {
        return (MockRequestExecutor) createDriver(name).getRequestExecutor();
    }

    public static MockRequestExecutor createMockDriver(String name, Properties defaultProps) {
        return (MockRequestExecutor) createDriver(name, defaultProps).getRequestExecutor();
    }

    public static MockRequestExecutor createMockDriver() {
        return (MockRequestExecutor) createDriver().getRequestExecutor();
    }

    public static Driver createDriver() {
        return createDriver("mock");
    }

    public static Driver createDriver(String name) {
        return createDriver(name, getDefaultProperties());
    }

    public static Driver createDriver(String name, Properties defaultProps) {
        Driver driver = Driver.builder().setName(name).setProperties(defaultProps)
                .setRequestExecutorBuilder(new MockDriverBuilder()).build();
        DriverFactory.put(name, driver);
        return driver;
    }

}