gobblin.http.HttpClientConfiguratorLoader.java Source code

Java tutorial

Introduction

Here is the source code for gobblin.http.HttpClientConfiguratorLoader.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 gobblin.http;

import org.apache.http.client.HttpClient;

import com.google.common.base.Optional;
import com.typesafe.config.Config;

import gobblin.configuration.State;
import gobblin.util.ClassAliasResolver;

/**
 * Creates an instance of HttpClientConfigurator using dependency injection from configuration.
 */
public class HttpClientConfiguratorLoader {

    /** Classname or alias for an {@link HttpClientConfigurator} instance to use for configuring and
     * instantiating of {@link HttpClient} instances. */
    public static final String HTTP_CLIENT_CONFIGURATOR_TYPE_KEY = "httpClientConfigurator.type";
    public static final String HTTP_CLIENT_CONFIGURATOR_TYPE_FULL_KEY = "gobblin."
            + HTTP_CLIENT_CONFIGURATOR_TYPE_KEY;
    public static final Class<? extends HttpClientConfigurator> DEFAULT_CONFIGURATOR_CLASS = DefaultHttpClientConfigurator.class;

    private static final ClassAliasResolver<HttpClientConfigurator> TYPE_RESOLVER = new ClassAliasResolver<>(
            HttpClientConfigurator.class);
    private final HttpClientConfigurator _configurator;

    /**
     * Loads a HttpClientConfigurator using the value of the {@link #HTTP_CLIENT_CONFIGURATOR_TYPE_FULL_KEY}
     * property in the state.
     */
    public HttpClientConfiguratorLoader(State state) {
        this(Optional.<String>fromNullable(state.getProp(HTTP_CLIENT_CONFIGURATOR_TYPE_FULL_KEY)));
    }

    /** Loads a HttpClientConfigurator using the value of {@link #HTTP_CLIENT_CONFIGURATOR_TYPE_KEY}
     * in the local typesafe config. */
    public HttpClientConfiguratorLoader(Config config) {
        this(Optional.<String>fromNullable(config.hasPath(HTTP_CLIENT_CONFIGURATOR_TYPE_KEY)
                ? config.getString(HTTP_CLIENT_CONFIGURATOR_TYPE_KEY)
                : null));
    }

    /** Loads a HttpClientConfigurator with the specified class or alias. If not specified,
     * {@link #DEFAULT_CONFIGURATOR_CLASS} is used. */
    public HttpClientConfiguratorLoader(Optional<String> configuratorType) {
        try {
            _configurator = getConfiguratorClass(configuratorType).newInstance();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            throw new RuntimeException("Unable to find HttpClientConfigurator:" + e, e);
        }
    }

    private static Class<? extends HttpClientConfigurator> getConfiguratorClass(Optional<String> configuratorType)
            throws ClassNotFoundException {
        return configuratorType.isPresent() ? TYPE_RESOLVER.resolveClass(configuratorType.get())
                : DEFAULT_CONFIGURATOR_CLASS;
    }

    public HttpClientConfigurator getConfigurator() {
        return _configurator;
    }

}