/******************************************************************************* * Copyright (c) 2007, 2008 compeople AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * compeople AG (Stefan Liebig) - initial API and implementation *******************************************************************************/ package de.compeople.commons.net.proxy; import java.io.IOException; import java.net.Proxy; import java.net.ProxySelector; import java.net.SocketAddress; import java.net.URI; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * A proxy selector for a �manual� specified proxy. */ public class ManualProxySelector extends ProxySelector { private static final Logger log = LoggerFactory.getLogger(ManualProxySelector.class); private List<Proxy> universalProxies; private Map<String, List<Proxy>> protocolSpecificProxies; /** * Create a manual proxy selector returning a DIRECT proxy. */ public ManualProxySelector() { this.universalProxies = null; this.protocolSpecificProxies = null; } /** * Create a manual proxy selector with the given universal proxies. * * @param universalProxies */ public ManualProxySelector( List<Proxy> universalProxies ) { this.universalProxies = universalProxies; this.protocolSpecificProxies = null; } /** * Create a manual proxy selector with the given protocol specific proxies. * * @param protocolSpecificProxies */ public ManualProxySelector( Map<String, List<Proxy>> protocolSpecificProxies ) { this.universalProxies = null; this.protocolSpecificProxies = protocolSpecificProxies; } /** * Create a manual proxy selector with the given univeral and protocol specific proxies. * * @param universalProxies * @param protocolSpecificProxies */ public ManualProxySelector( List<Proxy> universalProxies, Map<String, List<Proxy>> protocolSpecificProxies ) { this.universalProxies = universalProxies; this.protocolSpecificProxies = protocolSpecificProxies; } /** * @see java.net.ProxySelector#select(java.net.URI) */ @Override public List<Proxy> select( URI uri ) { if ( protocolSpecificProxies != null && !protocolSpecificProxies.isEmpty() ) { List<Proxy> proxies = protocolSpecificProxies.get( uri.getScheme() ); return proxies != null ? proxies : ProxySelectorUtils.getProxyListDirectAccessOnly(); } else if ( universalProxies != null && !universalProxies.isEmpty() ) { return universalProxies; } else { return ProxySelectorUtils.getProxyListDirectAccessOnly(); } } /** * @see java.net.ProxySelector#connectFailed(java.net.URI, java.net.SocketAddress, java.io.IOException) */ @Override public void connectFailed( URI uri, SocketAddress sa, IOException ioe ) { // nothing to do! log.warn( "Could not connect to '" + uri + "' via proxy '" + sa + "' because of error '" + ioe + "'." ); } /** * @see java.lang.Object#toString() */ @Override public String toString() { StringBuilder bob = new StringBuilder( "ManualProxySelector:" ); bob.append( " universal: " ).append( universalProxies ); bob.append( " specific: " ).append( protocolSpecificProxies ); return bob.toString(); } }