/******************************************************************************* * Copyright (c) 2007, 2014 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 - initial API and implementation *******************************************************************************/ package org.eclipse.riena.internal.communication.core.proxyselector; import java.net.ProxySelector; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import org.osgi.service.log.LogService; import org.eclipse.equinox.log.Logger; import org.eclipse.riena.core.Log4r; import org.eclipse.riena.core.wire.InjectExtension; import org.eclipse.riena.internal.communication.core.Activator; /** * Configure the {@code ProxySelector} used by the {@code UrlConnection}. */ public class ProxySelectorConfiguration { private final ProxySelector previousProxySlector = ProxySelector.getDefault(); private final static Logger LOGGER = Log4r.getLogger(Activator.getDefault(), ProxySelectorConfiguration.class); @InjectExtension() public void configure(final IProxySelectorExtension[] proxySelectorExtensions) { uninstall(ProxySelector.getDefault()); if (proxySelectorExtensions == null || proxySelectorExtensions.length == 0) { ProxySelector.setDefault(previousProxySlector); return; } Arrays.sort(proxySelectorExtensions, new Comparator<IProxySelectorExtension>() { public int compare(final IProxySelectorExtension e1, final IProxySelectorExtension e2) { return e1.getOrder() < e2.getOrder() ? -1 : e1.getOrder() > e2.getOrder() ? 1 : 0; } }); LOGGER.log(LogService.LOG_DEBUG, "Configured proxy selectors:"); //$NON-NLS-1$ final List<ProxySelector> proxySelectors = new ArrayList<ProxySelector>(proxySelectorExtensions.length); for (final IProxySelectorExtension extension : proxySelectorExtensions) { final ProxySelector proxySelector = extension.createProxySelector(); LOGGER.log(LogService.LOG_DEBUG, " - " + extension.getName() + " with order=" + extension.getOrder() //$NON-NLS-1$ //$NON-NLS-2$ + " implemented by " + proxySelector.getClass().getName()); //$NON-NLS-1$ proxySelectors.add(proxySelector); } ProxySelector.setDefault(new CompoundProxySelector(proxySelectors)); } public void uninstall() { uninstall(ProxySelector.getDefault()); ProxySelector.setDefault(previousProxySlector); } private void uninstall(final ProxySelector proxySelector) { if (proxySelector instanceof CompoundProxySelector) { ((CompoundProxySelector) proxySelector).uninstall(); } } }