Java tutorial
package org.apache.maven.wagon.shared.http; /* * 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. */ import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.message.BasicHeader; import org.apache.maven.wagon.Wagon; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays; import java.util.Map; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Configuration helper class */ public class ConfigurationUtils { private static final String SO_TIMEOUT = "http.socket.timeout"; private static final String STALE_CONNECTION_CHECK = "http.connection.stalecheck"; private static final String CONNECTION_TIMEOUT = "http.connection.timeout"; private static final String USE_EXPECT_CONTINUE = "http.protocol.expect-continue"; private static final String DEFAULT_PROXY = "http.route.default-proxy"; private static final String LOCAL_ADDRESS = "http.route.local-address"; private static final String PROXY_AUTH_PREF = "http.auth.proxy-scheme-pref"; private static final String TARGET_AUTH_PREF = "http.auth.target-scheme-pref"; private static final String HANDLE_AUTHENTICATION = "http.protocol.handle-authentication"; private static final String ALLOW_CIRCULAR_REDIRECTS = "http.protocol.allow-circular-redirects"; private static final String CONN_MANAGER_TIMEOUT = "http.conn-manager.timeout"; private static final String COOKIE_POLICY = "http.protocol.cookie-policy"; private static final String MAX_REDIRECTS = "http.protocol.max-redirects"; private static final String HANDLE_REDIRECTS = "http.protocol.handle-redirects"; private static final String REJECT_RELATIVE_REDIRECT = "http.protocol.reject-relative-redirect"; private static final String COERCE_PATTERN = "%(\\w+),(.+)"; public static void copyConfig(HttpMethodConfiguration config, RequestConfig.Builder builder) { if (config.getConnectionTimeout() > 0) { builder.setConnectTimeout(config.getConnectionTimeout()); } if (config.getReadTimeout() > 0) { builder.setSocketTimeout(config.getReadTimeout()); } Properties params = config.getParams(); if (params != null) { Pattern coercePattern = Pattern.compile(COERCE_PATTERN); for (Map.Entry entry : params.entrySet()) { String key = (String) entry.getKey(); String value = (String) entry.getValue(); Matcher matcher = coercePattern.matcher(value); if (matcher.matches()) { value = matcher.group(2); } if (key.equals(SO_TIMEOUT)) { builder.setSocketTimeout(Integer.parseInt(value)); } else if (key.equals(STALE_CONNECTION_CHECK)) { builder.setStaleConnectionCheckEnabled(Boolean.valueOf(value)); } else if (key.equals(CONNECTION_TIMEOUT)) { builder.setConnectTimeout(Integer.parseInt(value)); } else if (key.equals(USE_EXPECT_CONTINUE)) { builder.setExpectContinueEnabled(Boolean.valueOf(value)); } else if (key.equals(DEFAULT_PROXY)) { builder.setProxy(new HttpHost(value)); } else if (key.equals(LOCAL_ADDRESS)) { try { builder.setLocalAddress(InetAddress.getByName(value)); } catch (UnknownHostException ignore) { // ignore } } else if (key.equals(PROXY_AUTH_PREF)) { builder.setProxyPreferredAuthSchemes(Arrays.asList(value.split(","))); } else if (key.equals(TARGET_AUTH_PREF)) { builder.setTargetPreferredAuthSchemes(Arrays.asList(value.split(","))); } else if (key.equals(HANDLE_AUTHENTICATION)) { builder.setAuthenticationEnabled(Boolean.valueOf(value)); } else if (key.equals(ALLOW_CIRCULAR_REDIRECTS)) { builder.setCircularRedirectsAllowed(Boolean.valueOf(value)); } else if (key.equals(CONN_MANAGER_TIMEOUT)) { builder.setConnectionRequestTimeout(Integer.parseInt(value)); } else if (key.equals(COOKIE_POLICY)) { builder.setCookieSpec(value); } else if (key.equals(MAX_REDIRECTS)) { builder.setMaxRedirects(Integer.parseInt(value)); } else if (key.equals(HANDLE_REDIRECTS)) { builder.setRedirectsEnabled(Boolean.valueOf(value)); } else if (key.equals(REJECT_RELATIVE_REDIRECT)) { builder.setRelativeRedirectsAllowed(!Boolean.valueOf(value)); } } } } public static Header[] asRequestHeaders(HttpMethodConfiguration config) { Properties headers = config.getHeaders(); if (headers == null) { return new Header[0]; } Header[] result = new Header[headers.size()]; int index = 0; for (Map.Entry entry : headers.entrySet()) { String key = (String) entry.getKey(); String value = (String) entry.getValue(); Header header = new BasicHeader(key, value); result[index++] = header; } return result; } public static HttpMethodConfiguration merge(HttpMethodConfiguration defaults, HttpMethodConfiguration base, HttpMethodConfiguration local) { HttpMethodConfiguration result = merge(defaults, base); return merge(result, local); } public static HttpMethodConfiguration merge(HttpMethodConfiguration base, HttpMethodConfiguration local) { if (base == null && local == null) { return null; } else if (base == null) { return local; } else if (local == null) { return base; } else { HttpMethodConfiguration result = base.copy(); if (local.getConnectionTimeout() != Wagon.DEFAULT_CONNECTION_TIMEOUT) { result.setConnectionTimeout(local.getConnectionTimeout()); } if (local.getReadTimeout() != Wagon.DEFAULT_READ_TIMEOUT) { result.setReadTimeout(local.getReadTimeout()); } if (local.getHeaders() != null) { result.getHeaders().putAll(local.getHeaders()); } if (local.getParams() != null) { result.getParams().putAll(local.getParams()); } if (local.getUseDefaultHeaders() != null) { result.setUseDefaultHeaders(local.isUseDefaultHeaders()); } return result; } } }