/** * 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 org.apache.camel.component.weather; import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; import org.apache.camel.component.weather.http.AuthenticationHttpClientConfigurer; import org.apache.camel.component.weather.http.AuthenticationMethod; import org.apache.camel.component.weather.http.CompositeHttpConfigurer; import org.apache.camel.component.weather.http.HttpClientConfigurer; import org.apache.camel.impl.UriEndpointComponent; import org.apache.camel.util.ObjectHelper; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpConnectionManager; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; /** * A <a href="http://camel.apache.org/weather.html">Weather Component</a>. * <p/> * Camel uses <a href="http://openweathermap.org/api#weather">Open Weather</a> to get the information. */ public class WeatherComponent extends UriEndpointComponent { private HttpClient httpClient; public WeatherComponent() { super(WeatherEndpoint.class); } public WeatherComponent(CamelContext context) { super(context, WeatherEndpoint.class); } @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { WeatherConfiguration configuration = new WeatherConfiguration(this); // and then override from parameters setProperties(configuration, parameters); httpClient = createHttpClient(configuration); WeatherEndpoint endpoint = new WeatherEndpoint(uri, this, configuration); return endpoint; } private HttpClient createHttpClient(WeatherConfiguration configuration) { HttpConnectionManager connectionManager = configuration.getHttpConnectionManager(); if (connectionManager == null) { connectionManager = new MultiThreadedHttpConnectionManager(); } HttpClient httpClient = new HttpClient(connectionManager); if (configuration.getProxyHost() != null && configuration.getProxyPort() != null) { httpClient.getHostConfiguration().setProxy(configuration.getProxyHost(), configuration.getProxyPort()); } if (configuration.getProxyAuthUsername() != null && configuration.getProxyAuthMethod() == null) { throw new IllegalArgumentException("Option proxyAuthMethod must be provided to use proxy authentication"); } CompositeHttpConfigurer configurer = new CompositeHttpConfigurer(); if (configuration.getProxyAuthMethod() != null) { configureProxyAuth(configurer, configuration.getProxyAuthMethod(), configuration.getProxyAuthUsername(), configuration.getProxyAuthPassword(), configuration.getProxyAuthDomain(), configuration.getProxyAuthHost()); } configurer.configureHttpClient(httpClient); return httpClient; } private HttpClientConfigurer configureProxyAuth(CompositeHttpConfigurer configurer, String authMethod, String username, String password, String domain, String host) { // no proxy auth is in use if (username == null && authMethod == null) { return configurer; } // validate mandatory options given if (username != null && authMethod == null) { throw new IllegalArgumentException("Option proxyAuthMethod must be provided to use proxy authentication"); } ObjectHelper.notNull(authMethod, "proxyAuthMethod"); ObjectHelper.notNull(username, "proxyAuthUsername"); ObjectHelper.notNull(password, "proxyAuthPassword"); AuthenticationMethod auth = getCamelContext().getTypeConverter().convertTo(AuthenticationMethod.class, authMethod); if (auth == AuthenticationMethod.Basic || auth == AuthenticationMethod.Digest) { configurer.addConfigurer(AuthenticationHttpClientConfigurer.basicAutenticationConfigurer(true, username, password)); return configurer; } else if (auth == AuthenticationMethod.NTLM) { // domain is mandatory for NTML ObjectHelper.notNull(domain, "proxyAuthDomain"); configurer.addConfigurer(AuthenticationHttpClientConfigurer.ntlmAutenticationConfigurer(true, username, password, domain, host)); return configurer; } throw new IllegalArgumentException("Unknown proxyAuthMethod " + authMethod); } public HttpClient getHttpClient() { return httpClient; } }