com.amazonaws.eclipse.core.HttpClientFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.amazonaws.eclipse.core.HttpClientFactory.java

Source

/*
 * Copyright 2014 Amazon Technologies, Inc.
 *
 * 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://aws.amazon.com/apache2.0
 *
 * This file 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 com.amazonaws.eclipse.core;

import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.NTCredentials;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.eclipse.core.net.proxy.IProxyData;
import org.eclipse.core.net.proxy.IProxyService;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.preference.IPreferenceStore;

import com.amazonaws.eclipse.core.preferences.PreferenceConstants;

/**
 * An HttpClient factory that sets up timeouts and proxy settings. You should
 * never create an HttpClient of your own, you should always use this factory.
 */
public final class HttpClientFactory {

    public static DefaultHttpClient create(Plugin plugin, String url) {
        HttpParams httpClientParams = new BasicHttpParams();

        IPreferenceStore preferences = AwsToolkitCore.getDefault().getPreferenceStore();

        int connectionTimeout = preferences.getInt(PreferenceConstants.P_CONNECTION_TIMEOUT);
        int socketTimeout = preferences.getInt(PreferenceConstants.P_SOCKET_TIMEOUT);

        HttpConnectionParams.setConnectionTimeout(httpClientParams, connectionTimeout);
        HttpConnectionParams.setSoTimeout(httpClientParams, socketTimeout);

        HttpProtocolParams.setUserAgent(httpClientParams,
                AwsClientUtils.formatUserAgentString("AWS-Toolkit-For-Eclipse", plugin));

        DefaultHttpClient httpclient = new DefaultHttpClient(httpClientParams);
        configureProxy(httpclient, url);

        return httpclient;
    }

    private static void configureProxy(DefaultHttpClient client, String url) {
        AwsToolkitCore plugin = AwsToolkitCore.getDefault();
        if (plugin != null) {
            IProxyService proxyService = AwsToolkitCore.getDefault().getProxyService();

            if (proxyService.isProxiesEnabled()) {
                try {
                    IProxyData[] proxyData;
                    proxyData = proxyService.select(new URI(url));
                    if (proxyData.length > 0) {

                        IProxyData data = proxyData[0];
                        client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
                                new HttpHost(data.getHost(), data.getPort()));

                        if (data.isRequiresAuthentication()) {
                            client.getCredentialsProvider().setCredentials(
                                    new AuthScope(data.getHost(), data.getPort()),
                                    new NTCredentials(data.getUserId(), data.getPassword(), null, null));
                        }
                    }
                } catch (URISyntaxException e) {
                    plugin.getLog().log(new Status(Status.ERROR, AwsToolkitCore.PLUGIN_ID, e.getMessage(), e));
                }
            }
        }
    }

    private HttpClientFactory() {
    }
}