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

bdi.glue.http.httpclient.HttpClientWorld Maven / Gradle / Ivy

package bdi.glue.http.httpclient;

import com.google.common.base.Function;
import com.google.common.collect.Lists;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;

import java.util.List;

/**
 * @author @aloyer
 */
public class HttpClientWorld {
    private final List> builderConfigurers = Lists.newArrayList();
    private final List> clientConfigurers = Lists.newArrayList();

    private BasicCookieStore cookieStore;
    private CloseableHttpClient httpclient;
    private HttpClientBuilder httpClientBuilder;
    private HttpClientContext httpClientContext;

    public BasicCookieStore cookieStore() {
        if (cookieStore == null) {
            cookieStore = new BasicCookieStore();
        }
        return cookieStore;
    }

    public void setCookieStore(BasicCookieStore cookieStore) {
        if (httpClientBuilder != null || httpclient != null) {
            throw new IllegalStateException("HttpClientBuilder or HttpClient already instanciated");
        }
        this.cookieStore = cookieStore;
    }

    public CloseableHttpClient httpClient() {
        if (httpclient == null) {
            httpclient = getHttpClientBuilder().build();
            for (Function configurer : clientConfigurers) {
                httpclient = configurer.apply(httpclient);
            }
        }
        return httpclient;
    }

    public void setHttpclient(CloseableHttpClient httpclient) {
        this.httpclient = httpclient;
    }

    public HttpClientBuilder getHttpClientBuilder() {
        if (httpClientBuilder == null) {
            httpClientBuilder = HttpClients
                    .custom()
                    .setDefaultCookieStore(cookieStore());
            for (Function configurer : builderConfigurers) {
                httpClientBuilder = configurer.apply(httpClientBuilder);
                if (httpClientBuilder == null) {
                    throw new IllegalStateException("Configurer returns null... (" + configurer + ")");
                }
            }
        }
        return httpClientBuilder;
    }

    public void registerBuilderConfigurer(Function configurer) {
        if (httpClientBuilder != null || httpclient != null) {
            throw new IllegalStateException("HttpClientBuilder or HttpClient already instanciated");
        }
        builderConfigurers.add(configurer);
    }

    public void registerClientConfigurer(Function configurer) {
        if (httpClientBuilder != null || httpclient != null) {
            throw new IllegalStateException("HttpClientBuilder or HttpClient already instanciated");
        }
        clientConfigurers.add(configurer);
    }

    public HttpClientContext httpClientContext() {
        if (httpClientContext == null) {
            httpClientContext = HttpClientContext.create();
        }
        return httpClientContext;
    }

    public void setHttpClientContext(HttpClientContext httpContext) {
        this.httpClientContext = httpContext;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy