### Eclipse Workspace Patch 1.0
#P org.eclipse.core.net
Index: src/org/eclipse/core/internal/net/ProxyType.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyType.java,v
retrieving revision 1.14
diff -u -r1.14 ProxyType.java
--- src/org/eclipse/core/internal/net/ProxyType.java 20 Nov 2008 15:50:09 -0000 1.14
+++ src/org/eclipse/core/internal/net/ProxyType.java 10 Dec 2008 02:46:00 -0000
@@ -30,6 +30,9 @@
public class ProxyType implements INodeChangeListener, IPreferenceChangeListener {
+ // TODO: ProxyType should be a data container object only.
+ // Most of the logic, including anything proxy-type specific, should be moved into the various provider implementations.
+
/**
* Preference keys
*/
@@ -176,7 +179,8 @@
updatePreferences(getPreferenceNode(), proxyData);
}
- /* package */ void updatePreferencesIfMissing(Preferences node, IProxyData proxyData) {
+ // TODO: Remove public. Temporarily needed for child-package access from EclipseProvider.
+ public void updatePreferencesIfMissing(Preferences node, IProxyData proxyData) {
Preferences proxyNode = node.node(PREF_PROXY_DATA_NODE).node(getName());
if (node.get(PREF_PROXY_HOST, null) == null)
updatePreferences(proxyNode, proxyData);
@@ -205,7 +209,8 @@
}
}
- /* package */void updateSystemProperties(IProxyData proxyData, boolean proxiesEnabled) {
+ // TODO: Remove public. Temporarily needed for child-package access from EclipseProvider.
+ public void updateSystemProperties(IProxyData proxyData, boolean proxiesEnabled) {
try {
if (proxyData.getType().equals(IProxyData.HTTP_PROXY_TYPE)) {
updateHttpSystemProperties(proxyData, proxiesEnabled);
Index: src/org/eclipse/core/internal/net/PreferenceModifyListener.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/internal/net/PreferenceModifyListener.java,v
retrieving revision 1.5
diff -u -r1.5 PreferenceModifyListener.java
--- src/org/eclipse/core/internal/net/PreferenceModifyListener.java 3 Jun 2008 13:35:40 -0000 1.5
+++ src/org/eclipse/core/internal/net/PreferenceModifyListener.java 10 Dec 2008 02:45:54 -0000
@@ -10,10 +10,7 @@
*******************************************************************************/
package org.eclipse.core.internal.net;
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.osgi.service.prefs.BackingStoreException;
public class PreferenceModifyListener extends
org.eclipse.core.runtime.preferences.PreferenceModifyListener {
@@ -23,13 +20,14 @@
}
public IEclipsePreferences preApply(IEclipsePreferences node) {
- try {
- if (node.nodeExists(InstanceScope.SCOPE)) {
- ((ProxyManager)ProxyManager.getProxyManager()).migrateInstanceScopePreferences(node.node(InstanceScope.SCOPE), node.node(ConfigurationScope.SCOPE), false);
- }
- } catch (BackingStoreException e) {
- Activator.logError("Could not access instance preferences", e); //$NON-NLS-1$
- }
+ // TODO: Fix and re-enable preApply if needed.
+// try {
+// if (node.nodeExists(InstanceScope.SCOPE)) {
+// ((ProxyManager)ProxyManager.getProxyManager()).migrateInstanceScopePreferences(node.node(InstanceScope.SCOPE), node.node(ConfigurationScope.SCOPE), false);
+// }
+// } catch (BackingStoreException e) {
+// Activator.logError("Could not access instance preferences", e); //$NON-NLS-1$
+// }
return super.preApply(node);
}
Index: src/org/eclipse/core/internal/net/Activator.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/internal/net/Activator.java,v
retrieving revision 1.6
diff -u -r1.6 Activator.java
--- src/org/eclipse/core/internal/net/Activator.java 21 May 2008 09:18:56 -0000 1.6
+++ src/org/eclipse/core/internal/net/Activator.java 10 Dec 2008 02:45:54 -0000
@@ -50,6 +50,7 @@
private static final String PROP_REGISTER_SERVICE = "org.eclipse.net.core.enableProxyService"; //$NON-NLS-1$
public static final String PT_AUTHENTICATOR = "authenticator"; //$NON-NLS-1$
+ public static final String PT_PROVIDER = "provider"; //$NON-NLS-1$
private BundleContext bundleContext;
@@ -174,8 +175,7 @@
if (Boolean
.valueOf(System.getProperty(PROP_REGISTER_SERVICE, "true")).booleanValue()) { //$NON-NLS-1$
- ProxyManager proxyManager = (ProxyManager) ProxyManager
- .getProxyManager();
+ ProxyManager proxyManager = ProxyManager.getProxyManager();
proxyManager.initialize();
proxyService = context.registerService(IProxyService.class
.getName(), proxyManager, new Hashtable());
Index: src/org/eclipse/core/internal/net/AbstractProxyProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/internal/net/AbstractProxyProvider.java,v
retrieving revision 1.5
diff -u -r1.5 AbstractProxyProvider.java
--- src/org/eclipse/core/internal/net/AbstractProxyProvider.java 18 Nov 2008 15:16:53 -0000 1.5
+++ src/org/eclipse/core/internal/net/AbstractProxyProvider.java 10 Dec 2008 02:45:52 -0000
@@ -14,9 +14,11 @@
import java.net.URI;
import org.eclipse.core.net.proxy.IProxyData;
+import org.eclipse.core.net.proxy.IProxyProvider;
/**
* Returns proxies to use.
+ * @deprecated Use {@link IProxyProvider} instead.
*/
public abstract class AbstractProxyProvider {
@@ -51,9 +53,9 @@
return proxies;
}
- protected abstract IProxyData[] getProxyData(URI uri);
+ public abstract IProxyData[] getProxyData(URI uri);
- protected abstract IProxyData[] getProxyData();
+ public abstract IProxyData[] getProxyData();
- protected abstract String[] getNonProxiedHosts();
+ public abstract String[] getNonProxiedHosts();
}
Index: src/org/eclipse/core/internal/net/WindowsProxyProvider.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/internal/net/WindowsProxyProvider.java,v
retrieving revision 1.5
diff -u -r1.5 WindowsProxyProvider.java
--- src/org/eclipse/core/internal/net/WindowsProxyProvider.java 18 Nov 2008 15:16:52 -0000 1.5
+++ src/org/eclipse/core/internal/net/WindowsProxyProvider.java 10 Dec 2008 02:46:00 -0000
@@ -37,15 +37,15 @@
winHttpProxyProvider = new WinHttpProxyProvider();
}
- protected IProxyData[] getProxyData(URI uri) {
+ public IProxyData[] getProxyData(URI uri) {
return winHttpProxyProvider.getProxyData(uri);
}
- protected IProxyData[] getProxyData() {
+ public IProxyData[] getProxyData() {
return winHttpProxyProvider.getProxyData();
}
- protected String[] getNonProxiedHosts() {
+ public String[] getNonProxiedHosts() {
return winHttpProxyProvider.getNonProxiedHosts();
}
Index: src/org/eclipse/core/internal/net/ProxyManager.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxyManager.java,v
retrieving revision 1.22
diff -u -r1.22 ProxyManager.java
--- src/org/eclipse/core/internal/net/ProxyManager.java 25 Nov 2008 08:10:11 -0000 1.22
+++ src/org/eclipse/core/internal/net/ProxyManager.java 10 Dec 2008 02:45:56 -0000
@@ -7,21 +7,20 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Mark A. Ziesemer - Refactoring into seperate extensions.
*******************************************************************************/
package org.eclipse.core.internal.net;
-import java.net.Authenticator;
import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
+import java.util.LinkedList;
import java.util.List;
-import java.util.Properties;
+import org.eclipse.core.internal.net.providers.DirectProvider;
import org.eclipse.core.net.proxy.IProxyChangeEvent;
import org.eclipse.core.net.proxy.IProxyChangeListener;
import org.eclipse.core.net.proxy.IProxyData;
+import org.eclipse.core.net.proxy.IProxyProvider;
import org.eclipse.core.net.proxy.IProxyService;
-import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
@@ -30,65 +29,86 @@
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.RegistryFactory;
import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
import org.eclipse.osgi.util.NLS;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
public class ProxyManager implements IProxyService, IPreferenceChangeListener {
- private static final String PREF_HAS_MIGRATED = "org.eclipse.core.net.hasMigrated"; //$NON-NLS-1$
+ private static final String PREF_PROVIDER = "provider"; //$NON-NLS-1$
+ private static final String PROVIDER_DEFAULT = DirectProvider.class.getName();
- /**
- * Preference constants used by Update to record the HTTP proxy
- */
- private static String HTTP_PROXY_HOST = "org.eclipse.update.core.proxy.host"; //$NON-NLS-1$
- private static String HTTP_PROXY_PORT = "org.eclipse.update.core.proxy.port"; //$NON-NLS-1$
- private static String HTTP_PROXY_ENABLE = "org.eclipse.update.core.proxy.enable"; //$NON-NLS-1$
-
- private static final String PREF_NON_PROXIED_HOSTS = "nonProxiedHosts"; //$NON-NLS-1$
- private static final String PREF_ENABLED = "proxiesEnabled"; //$NON-NLS-1$
- private static final String PREF_OS = "systemProxiesEnabled"; //$NON-NLS-1$
-
- private static IProxyService proxyManager;
+ private static ProxyManager proxyManager;
- private AbstractProxyProvider nativeProxyProvider;
+ private IProxyProvider provider;
ListenerList listeners = new ListenerList(ListenerList.IDENTITY);
- private String[] nonProxiedHosts;
- private final ProxyType[] proxies = new ProxyType[] {
- new ProxyType(IProxyData.HTTP_PROXY_TYPE),
- new ProxyType(IProxyData.HTTPS_PROXY_TYPE),
- new ProxyType(IProxyData.SOCKS_PROXY_TYPE)
- };
-
- private boolean migrated = false;
-
- private ProxyManager() {
- try {
- nativeProxyProvider = (AbstractProxyProvider) Class.forName(
- "org.eclipse.core.net.ProxyProvider").newInstance(); //$NON-NLS-1$
- } catch (ClassNotFoundException e) {
- // no class found
- } catch (Exception e) {
- Activator.logInfo("Problems occured during the proxy provider initialization.", e); //$NON-NLS-1$
- }
- }
/**
* Return the proxy manager.
* @return the proxy manager
*/
- public synchronized static IProxyService getProxyManager() {
+ public synchronized static ProxyManager getProxyManager() {
if (proxyManager == null)
proxyManager = new ProxyManager();
return proxyManager;
}
+ public void initialize() {
+ ((IEclipsePreferences)Activator.getInstance().getPreferences())
+ .addPreferenceChangeListener(this);
+ registerProvider();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.net.proxy.IProxyService#getProviders()
+ */
+ public IProxyProvider[] getProviders(){
+ List resultList = new LinkedList();
+ IExtension[] extensions = RegistryFactory.getRegistry().getExtensionPoint(Activator.ID, Activator.PT_PROVIDER).getExtensions();
+ for(int i=0; i 0);
- }
- String[] oldHosts = nonProxiedHosts;
- nonProxiedHosts = hosts;
- Activator.getInstance().getPreferences().put(PREF_NON_PROXIED_HOSTS, ProxyType.convertHostsToPropertyString(nonProxiedHosts));
- try {
- Activator.getInstance().getPreferences().flush();
- } catch (BackingStoreException e) {
- Activator.logError(
- "An error occurred while writing out the non-proxied hosts list", e); //$NON-NLS-1$
- }
- IProxyData[] data = getProxyData();
- IProxyChangeEvent event = new ProxyChangeEvent(IProxyChangeEvent.NONPROXIED_HOSTS_CHANGED, oldHosts, getNonProxiedHosts(), data, new IProxyData[0]);
- fireChange(event);
- }
-
- public IProxyData[] getProxyData() {
- checkMigrated();
- IProxyData[] result = new IProxyData[proxies.length];
- for (int i = 0; i < proxies.length; i++) {
- ProxyType type = proxies[i];
- result[i] = type.getProxyData(ProxyType.VERIFY_EQUAL);
- }
- return resolveType(result);
- }
-
- public IProxyData[] getNativeProxyData() {
- if (hasSystemProxies()) {
- return resolveType(nativeProxyProvider.getProxyData());
- }
- return new IProxyData[0];
- }
-
- public void setProxyData(IProxyData[] proxies) {
- checkMigrated();
- doSetProxyData(proxies);
- }
-
- private void doSetProxyData(IProxyData[] proxyDatas) {
- IProxyData[] oldData = getProxyData();
- String[] hosts = getNonProxiedHosts();
- IProxyData[] changedProxies = internalSetProxyData(proxyDatas);
- if (changedProxies.length > 0) {
- IProxyChangeEvent event = new ProxyChangeEvent(IProxyChangeEvent.PROXY_SERVICE_ENABLEMENT_CHANGE, hosts, hosts, oldData, changedProxies);
- fireChange(event);
- }
- }
-
- private IProxyData[] internalSetProxyData(IProxyData[] proxyDatas) {
- List result = new ArrayList();
- for (int i = 0; i < proxyDatas.length; i++) {
- IProxyData proxyData = proxyDatas[i];
- ProxyType type = getType(proxyData);
- if (type != null && type.setProxyData(proxyData, internalIsProxiesEnabled())) {
- result.add(proxyData);
+ private void registerProvider(){
+ String configuredProviderId = Activator.getInstance().getPreferences().get(PREF_PROVIDER, PROVIDER_DEFAULT);
+ IProxyProvider[] providers = getProviders();
+ IProxyProvider resultProvider = null;
+ for(int i=0; resultProvider == null && i 0 ? resolveType(nativeProxyProvider.select(uri)[0]) : null;
- } catch (URISyntaxException e) {
- return null;
- }
-
- IProxyData[] data = getProxyDataForHost(host);
- for (int i = 0; i < data.length; i++) {
- IProxyData proxyData = data[i];
- if (proxyData.getType().equalsIgnoreCase(type)
- && proxyData.getHost() != null)
- return resolveType(proxyData);
- }
- return null;
- }
-
- private void registerAuthenticator() {
- Authenticator a = getPluggedInAuthenticator();
- if (a != null) {
- Authenticator.setDefault(a);
- }
- }
-
- private Authenticator getPluggedInAuthenticator() {
- IExtension[] extensions = RegistryFactory.getRegistry().getExtensionPoint(Activator.ID, Activator.PT_AUTHENTICATOR).getExtensions();
- if (extensions.length == 0)
- return null;
- IExtension extension = extensions[0];
- IConfigurationElement[] configs = extension.getConfigurationElements();
- if (configs.length == 0) {
- Activator.log(IStatus.ERROR, NLS.bind("Authenticator {0} is missing required fields", (new Object[] {extension.getUniqueIdentifier()})), null);//$NON-NLS-1$
- return null;
- }
- try {
- IConfigurationElement config = configs[0];
- return (Authenticator) config.createExecutableExtension("class");//$NON-NLS-1$
- } catch (CoreException ex) {
- Activator.log(IStatus.ERROR, NLS.bind("Unable to instantiate authenticator {0}", (new Object[] {extension.getUniqueIdentifier()})), ex);//$NON-NLS-1$
- return null;
- }
+ /** @deprecated */
+ public IProxyData getProxyData(String type){
+ throw new UnsupportedOperationException();
}
-
- private synchronized void checkMigrated() {
- if (migrated || !Activator.getInstance().instanceLocationAvailable())
- return;
-
- migrated = true;
- if (Activator.getInstance().getPreferences().getBoolean(PREF_HAS_MIGRATED, false))
- return;
-
- Activator.getInstance().getPreferences().putBoolean(PREF_HAS_MIGRATED, true);
- migrateInstanceScopePreferences(new InstanceScope().getNode(""), new ConfigurationScope().getNode(""), true); //$NON-NLS-1$//$NON-NLS-2$
- }
-
- void migrateInstanceScopePreferences(Preferences instanceNode, Preferences configurationNode, boolean isInitialize) {
- migrateUpdateHttpProxy(instanceNode, isInitialize);
-
- Preferences netInstancePrefs = instanceNode.node(Activator.ID);
- Preferences netConfigurationPrefs = configurationNode.node(Activator.ID);
-
- // migrate enabled status
- if (netConfigurationPrefs.get(PREF_ENABLED, null) == null) {
- String instanceEnabled = netInstancePrefs.get(PREF_ENABLED, null);
- if (instanceEnabled != null)
- netConfigurationPrefs.put(PREF_ENABLED, instanceEnabled);
- }
-
- // migrate enabled status
- if (netConfigurationPrefs.get(PREF_OS, null) == null) {
- String instanceEnabled = netInstancePrefs.get(PREF_OS, null);
- if (instanceEnabled != null)
- netConfigurationPrefs.put(PREF_OS, instanceEnabled);
- }
-
- // migrate non proxied hosts if not already set
- if (netConfigurationPrefs.get(PREF_NON_PROXIED_HOSTS, null) == null) {
- String instanceNonProxiedHosts = netInstancePrefs.get(PREF_NON_PROXIED_HOSTS, null);
- if (instanceNonProxiedHosts != null) {
- netConfigurationPrefs.put(PREF_NON_PROXIED_HOSTS, instanceNonProxiedHosts);
- nonProxiedHosts = null;
- }
- }
-
- // migrate proxy data
- boolean proxiesEnabled = netConfigurationPrefs.getBoolean(PREF_ENABLED, true);
- for (int i = 0; i < proxies.length; i++) {
- ProxyType type = proxies[i];
- IProxyData data = type.getProxyData(ProxyType.DO_NOT_VERIFY);
- if (data.getHost() == null) {
- ProxyType instanceType = new ProxyType(type.getName(),netInstancePrefs);
- IProxyData instanceData = instanceType.getProxyData(ProxyType.DO_NOT_VERIFY);
- if (instanceData.getHost() != null)
- type.setProxyData(instanceData, proxiesEnabled);
- }
- }
-
- // if this an import we should remove the old node
- if (! isInitialize) {
- try {
- netInstancePrefs.removeNode();
- } catch (BackingStoreException e) {
- // ignore
- }
- }
- }
-
- private void migrateUpdateHttpProxy(Preferences node, boolean isInitialize) {
- Preferences netPrefs = node.node(Activator.ID);
- if (!netPrefs.getBoolean(PREF_HAS_MIGRATED, false)) {
- // Only set the migration bit when initializing
- if (isInitialize)
- netPrefs.putBoolean(PREF_HAS_MIGRATED, true);
- Preferences updatePrefs = node.node("org.eclipse.update.core"); //$NON-NLS-1$
- String httpProxyHost = getHostToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
- int port = getPortToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
- boolean httpProxyEnable = getEnablementToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
- if (httpProxyHost != null) {
- ProxyData proxyData = new ProxyData(IProxyData.HTTP_PROXY_TYPE,
- httpProxyHost, port, false, null);
- ProxyType type = getType(proxyData);
- type.updatePreferencesIfMissing(netPrefs, proxyData);
- if (httpProxyEnable) {
- netPrefs.putBoolean(ProxyManager.PREF_ENABLED, true);
- }
- }
- }
+ /** @deprecated */
+ public IProxyData[] getProxyDataForHost(String host){
+ throw new UnsupportedOperationException();
}
- private boolean getEnablementToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
- boolean httpProxyEnable = false;
- if (checkSystemProperties && updatePrefs.get(HTTP_PROXY_ENABLE, null) == null) {
- httpProxyEnable = Boolean.getBoolean("http.proxySet"); //$NON-NLS-1$
- } else {
- httpProxyEnable = updatePrefs.getBoolean(HTTP_PROXY_ENABLE, false);
- updatePrefs.remove(HTTP_PROXY_ENABLE);
- }
- return httpProxyEnable;
+ /** @deprecated */
+ public IProxyData getProxyDataForHost(String host, String type){
+ throw new UnsupportedOperationException();
}
- private int getPortToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
- String httpProxyPort = updatePrefs.get(HTTP_PROXY_PORT, ""); //$NON-NLS-1$
- if (checkSystemProperties && "".equals(httpProxyPort)) { //$NON-NLS-1$
- httpProxyPort = System.getProperty("http.proxyPort", ""); //$NON-NLS-1$ //$NON-NLS-2$
- }
- updatePrefs.remove(HTTP_PROXY_PORT);
- int port = -1;
- if (httpProxyPort != null && !"".equals(httpProxyPort)) //$NON-NLS-1$
- try {
- port = Integer.parseInt(httpProxyPort);
- } catch (NumberFormatException e) {
- // Ignore
- }
- return port;
+ /** @deprecated */
+ public boolean hasSystemProxies(){
+ throw new UnsupportedOperationException();
}
- private String getHostToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
- String httpProxyHost = updatePrefs.get(HTTP_PROXY_HOST, ""); //$NON-NLS-1$
- if (checkSystemProperties && "".equals(httpProxyHost)) { //$NON-NLS-1$
- httpProxyHost = System.getProperty("http.proxyHost", ""); //$NON-NLS-1$ //$NON-NLS-2$
- }
- if ("".equals(httpProxyHost)) //$NON-NLS-1$
- httpProxyHost = null;
- updatePrefs.remove(HTTP_PROXY_HOST);
- return httpProxyHost;
+ /** @deprecated */
+ public boolean isProxiesEnabled(){
+ throw new UnsupportedOperationException();
}
- public void preferenceChange(PreferenceChangeEvent event) {
- if (event.getKey().equals(PREF_ENABLED) || event.getKey().equals(PREF_OS)) {
- checkMigrated();
- internalSetEnabled(Activator.getInstance().getPreferences().getBoolean(PREF_ENABLED, true),
- Activator.getInstance().getPreferences().getBoolean(PREF_OS, true));
- }
+ /** @deprecated */
+ public boolean isSystemProxiesEnabled(){
+ throw new UnsupportedOperationException();
}
- public boolean hasSystemProxies() {
- return nativeProxyProvider != null;
+ /** @deprecated */
+ public void setNonProxiedHosts(String[] hosts) throws CoreException{
+ throw new UnsupportedOperationException();
}
- public boolean isSystemProxiesEnabled() {
- checkMigrated();
- return Activator.getInstance().getPreferences().getBoolean(PREF_OS,
- true);
- }
-
- public void setSystemProxiesEnabled(boolean enabled) {
- checkMigrated();
- boolean current = isSystemProxiesEnabled();
- if (current == enabled)
- return;
- // Setting the preference will trigger the system property update
- // (see preferenceChange)
- Activator.getInstance().getPreferences().putBoolean(PREF_OS, enabled);
- }
-
- public IProxyData[] select(URI uri) {
- IProxyData data = getProxyDataForHost(uri.getHost(), uri.getScheme());
- if (data != null) {
- return resolveType(new IProxyData[] { data });
- }
- return new IProxyData[0];
+ /** @deprecated */
+ public void setProxiesEnabled(boolean enabled){
+ throw new UnsupportedOperationException();
}
- public IProxyData resolveType(IProxyData data) {
- if (data == null) {
- return null;
- }
- ProxyData d = (ProxyData) data;
- if (d.getType().equalsIgnoreCase(IProxyData.HTTP_PROXY_TYPE)) {
- d.setType(IProxyData.HTTP_PROXY_TYPE);
- } else if (d.getType().equalsIgnoreCase(IProxyData.HTTPS_PROXY_TYPE)) {
- d.setType(IProxyData.HTTPS_PROXY_TYPE);
- } else if (d.getType().equalsIgnoreCase(IProxyData.SOCKS_PROXY_TYPE)) {
- d.setType(IProxyData.SOCKS_PROXY_TYPE);
- }
- return d;
+ /** @deprecated */
+ public void setProxyData(IProxyData[] proxies) throws CoreException{
+ throw new UnsupportedOperationException();
}
- public IProxyData[] resolveType(IProxyData[] data) {
- if (data == null) {
- return null;
- }
- for (int i = 0; i < data.length; i++) {
- resolveType(data[i]);
- }
- return data;
+ /** @deprecated */
+ public void setSystemProxiesEnabled(boolean enabled){
+ throw new UnsupportedOperationException();
}
}
Index: src/org/eclipse/core/internal/net/ProxySelector.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/internal/net/ProxySelector.java,v
retrieving revision 1.3
diff -u -r1.3 ProxySelector.java
--- src/org/eclipse/core/internal/net/ProxySelector.java 25 Nov 2008 11:08:06 -0000 1.3
+++ src/org/eclipse/core/internal/net/ProxySelector.java 10 Dec 2008 02:45:56 -0000
@@ -17,6 +17,8 @@
/**
* This class adapts ProxyManager to add additional layer of providers on its
* top.
+ *
+ * @deprecated Converting to extension points ("org.eclipse.core.net.provider") instead.
*/
public class ProxySelector {
@@ -57,14 +59,14 @@
}
public static ProxyData[] getProxyData(String provider) {
- ProxyManager manager = (ProxyManager) ProxyManager.getProxyManager();
- if (provider.equals(DIRECT_PROVIDER)) {
- return new ProxyData[0];
- } else if (provider.equals(ECLIPSE_PROVIDER)) {
- return castArray(manager.getProxyData());
- } else if (provider.equals(NATIVE_PROVIDER)) {
- return castArray(manager.getNativeProxyData());
- }
+// ProxyManager manager = (ProxyManager) ProxyManager.getProxyManager();
+// if (provider.equals(DIRECT_PROVIDER)) {
+// return new ProxyData[0];
+// } else if (provider.equals(ECLIPSE_PROVIDER)) {
+// return castArray(manager.getProxyData());
+// } else if (provider.equals(NATIVE_PROVIDER)) {
+// return castArray(manager.getNativeProxyData());
+// }
throw new IllegalArgumentException("Provider not supported"); //$NON-NLS-1$
}
@@ -98,14 +100,14 @@
}
public static String[] getBypassHosts(String provider) {
- ProxyManager manager = (ProxyManager) ProxyManager.getProxyManager();
- if (provider.equals(DIRECT_PROVIDER)) {
- return new String[0];
- } else if (provider.equals(ECLIPSE_PROVIDER)) {
- return manager.getNonProxiedHosts();
- } else if (provider.equals(NATIVE_PROVIDER)) {
- return manager.getNativeNonProxiedHosts();
- }
+// ProxyManager manager = (ProxyManager) ProxyManager.getProxyManager();
+// if (provider.equals(DIRECT_PROVIDER)) {
+// return new String[0];
+// } else if (provider.equals(ECLIPSE_PROVIDER)) {
+// return manager.getNonProxiedHosts();
+// } else if (provider.equals(NATIVE_PROVIDER)) {
+// return manager.getNativeNonProxiedHosts();
+// }
throw new IllegalArgumentException("Provider not supported"); //$NON-NLS-1$
}
Index: src/org/eclipse/core/net/proxy/IProxyService.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/src/org/eclipse/core/net/proxy/IProxyService.java,v
retrieving revision 1.7
diff -u -r1.7 IProxyService.java
--- src/org/eclipse/core/net/proxy/IProxyService.java 21 Nov 2008 16:00:54 -0000 1.7
+++ src/org/eclipse/core/net/proxy/IProxyService.java 10 Dec 2008 02:46:02 -0000
@@ -31,6 +31,24 @@
public interface IProxyService {
/**
+ * Returns the available {@link IProxyProvider}s.
+ * @return The available {@link IProxyProvider}s.
+ */
+ IProxyProvider[] getProviders();
+
+ /**
+ * Returns the current {@link IProxyProvider} implementation.
+ * @return The current {@link IProxyProvider} implementation.
+ */
+ IProxyProvider getProvider();
+
+ /**
+ * Sets the the current {@link IProxyProvider} implementation.
+ * @param provider The {@link IProxyProvider} implementation to set.
+ */
+ void setProvider(IProxyProvider provider);
+
+ /**
* Sets whether proxy support should be enabled. The current proxy settings
* are still kept so clients should check the enablement using
* {@link #isProxiesEnabled()} before calling the {@link #getProxyData()} or
@@ -39,6 +57,8 @@
* {@link #getProxyDataForHost(String, String)} method will check the
* enablement and only return data if the service is enabled.
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @param enabled
* whether proxy support should be enabled
*/
@@ -53,6 +73,8 @@
* enabled but {@link #hasSystemProxies()} returns false
.
*
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @return whether proxy support should be enabled
*/
boolean isProxiesEnabled();
@@ -60,6 +82,8 @@
/**
* Returns whether system proxy support is available.
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @return whether system proxy support is available
* @since 1.1
*/
@@ -69,6 +93,8 @@
* Sets whether system proxies should be used, when the proxy support is
* enabled.
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @param enabled
* @since 1.1
*/
@@ -79,6 +105,8 @@
* Returns whether system proxy should be used when the proxy support is
* enabled.
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @return whether system proxy is used when the proxy support is enabled
* @since 1.1
*/
@@ -100,6 +128,8 @@
* This method returns the proxies set via {@link #setProxyData(IProxyData[])}
*
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @return the list of know proxy types and their settings
*/
IProxyData[] getProxyData();
@@ -154,6 +184,8 @@
* This method returns the proxies set via {@link #setProxyData(IProxyData[])}
*
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @param type
* the proxy type
* @return the proxy data for the proxy of the given type or
@@ -200,6 +232,8 @@
* is enabled).
*
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @param proxies
* the proxy data whose information is to be set.
* @throws CoreException
@@ -224,6 +258,8 @@
* {@link #setNonProxiedHosts(String[])}
*
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @return the list of hosts for which non proxy should be used.
* @see #getProxyDataForHost(String)
* @see #getProxyDataForHost(String, String)
@@ -239,6 +275,8 @@
* support is enabled).
*
*
+ * @deprecated Configuration should be handled through the implementation.
+ *
* @param hosts
* the list of hosts for which non proxy should be used
* @throws CoreException
Index: META-INF/MANIFEST.MF
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/META-INF/MANIFEST.MF,v
retrieving revision 1.13
diff -u -r1.13 MANIFEST.MF
--- META-INF/MANIFEST.MF 21 Nov 2008 10:48:40 -0000 1.13
+++ META-INF/MANIFEST.MF 10 Dec 2008 02:45:52 -0000
@@ -13,6 +13,7 @@
org.eclipse.equinox.registry;bundle-version="3.4.0"
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.core.internal.net;x-friends:="org.eclipse.ui.net",
+ org.eclipse.core.internal.net.providers;x-friends:="org.eclipse.ui.net",
org.eclipse.core.net.proxy
Bundle-RequiredExecutionEnvironment: J2SE-1.4,
CDC-1.1/Foundation-1.1
Index: plugin.xml
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.core.net/plugin.xml,v
retrieving revision 1.2
diff -u -r1.2 plugin.xml
--- plugin.xml 12 Apr 2007 20:55:53 -0000 1.2
+++ plugin.xml 10 Dec 2008 02:45:51 -0000
@@ -2,6 +2,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/org/eclipse/core/net/proxy/IProxyProvider.java
===================================================================
RCS file: src/org/eclipse/core/net/proxy/IProxyProvider.java
diff -N src/org/eclipse/core/net/proxy/IProxyProvider.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/core/net/proxy/IProxyProvider.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Mark A. Ziesemer 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:
+ * Mark A. Ziesemer - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.net.proxy;
+
+import java.net.URI;
+
+public interface IProxyProvider{
+
+ /**
+ * Returns the display name of the provider.
+ * @return The display name of the provider.
+ */
+ String getName();
+
+ /**
+ * Returns all the applicable proxy data to access the specified URI.
+ * Clients that wish to make a connection and need to determine whether to
+ * use a proxy should use this method.
+ * @param uri the URI for which proxies are returned
+ * @return list of all applicable proxy data, if no proxy is applicable then
+ * an empty array is returned
+ */
+ IProxyData[] select(URI uri);
+}
Index: src/org/eclipse/core/internal/net/providers/DirectProvider.java
===================================================================
RCS file: src/org/eclipse/core/internal/net/providers/DirectProvider.java
diff -N src/org/eclipse/core/internal/net/providers/DirectProvider.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/core/internal/net/providers/DirectProvider.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Mark A. Ziesemer 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:
+ * Mark A. Ziesemer - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.internal.net.providers;
+
+import java.net.URI;
+
+import org.eclipse.core.net.proxy.IProxyData;
+import org.eclipse.core.net.proxy.IProxyProviderExtension;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+public class DirectProvider implements IProxyProviderExtension{
+
+ protected final IProxyData[] emptyData = new IProxyData[0];
+
+ public DirectProvider(){
+ // Nothing to do.
+ }
+
+ public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
+ throws CoreException{
+ // Nothing to do.
+ }
+
+ public String getName(){
+ return "Direct"; //$NON-NLS-1$
+ }
+
+ public IProxyData[] select(URI uri){
+ return emptyData;
+ }
+
+}
Index: schema/provider.exsd
===================================================================
RCS file: schema/provider.exsd
diff -N schema/provider.exsd
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ schema/provider.exsd 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+ Extension point to provide different proxy implementations.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [Enter the first release in which this extension point appears.]
+
+
+
+
+
+
+
+
+ [Enter extension point usage example here.]
+
+
+
+
+
+
+
+
+ [Enter API information here.]
+
+
+
+
+
+
+
+
+ [Enter information about supplied implementation of this extension point.]
+
+
+
+
+
Index: src/org/eclipse/core/internal/net/providers/NativeProvider.java
===================================================================
RCS file: src/org/eclipse/core/internal/net/providers/NativeProvider.java
diff -N src/org/eclipse/core/internal/net/providers/NativeProvider.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/core/internal/net/providers/NativeProvider.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Mark A. Ziesemer 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: Mark A. Ziesemer - initial API and
+ * implementation
+ *******************************************************************************/
+package org.eclipse.core.internal.net.providers;
+
+import java.net.URI;
+
+import org.eclipse.core.internal.net.AbstractProxyProvider;
+import org.eclipse.core.internal.net.Activator;
+import org.eclipse.core.internal.net.ProxyData;
+import org.eclipse.core.net.proxy.IProxyData;
+import org.eclipse.core.net.proxy.IProxyProviderExtension;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+public class NativeProvider implements IProxyProviderExtension{
+
+ private AbstractProxyProvider nativeProxyProvider;
+
+ public NativeProvider(){
+ try{
+ nativeProxyProvider = (AbstractProxyProvider) Class.forName(
+ "org.eclipse.core.net.ProxyProvider").newInstance(); //$NON-NLS-1$
+ }catch(ClassNotFoundException e){
+ // no class found
+ }catch(Exception e){
+ Activator.logInfo("Problems occured during the proxy provider initialization.", e); //$NON-NLS-1$
+ }
+ }
+
+ public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
+ throws CoreException{
+ // Nothing to do.
+ }
+
+ public String getName(){
+ return "Native"; //$NON-NLS-1$
+ }
+
+ public IProxyData[] select(URI uri){
+ return nativeProxyProvider.getProxyData(uri);
+ }
+
+ public String[] getNativeNonProxiedHosts(){
+ //if(hasSystemProxies()){
+ return nativeProxyProvider.getNonProxiedHosts();
+ //}
+ //return new String[0];
+ }
+
+ public IProxyData[] getNativeProxyData() {
+ //if (hasSystemProxies()) {
+ return resolveType(nativeProxyProvider.getProxyData());
+ //}
+ //return new IProxyData[0];
+ }
+
+ // TODO: Factor out duplication with EclipseProvider.
+ public IProxyData resolveType(IProxyData data) {
+ if (data == null) {
+ return null;
+ }
+ ProxyData d = (ProxyData) data;
+ if (d.getType().equalsIgnoreCase(IProxyData.HTTP_PROXY_TYPE)) {
+ d.setType(IProxyData.HTTP_PROXY_TYPE);
+ } else if (d.getType().equalsIgnoreCase(IProxyData.HTTPS_PROXY_TYPE)) {
+ d.setType(IProxyData.HTTPS_PROXY_TYPE);
+ } else if (d.getType().equalsIgnoreCase(IProxyData.SOCKS_PROXY_TYPE)) {
+ d.setType(IProxyData.SOCKS_PROXY_TYPE);
+ }
+ return d;
+ }
+
+ // TODO: Factor out duplication with EclipseProvider.
+ public IProxyData[] resolveType(IProxyData[] data) {
+ if (data == null) {
+ return null;
+ }
+ for (int i = 0; i < data.length; i++) {
+ resolveType(data[i]);
+ }
+ return data;
+ }
+
+}
Index: src/org/eclipse/core/internal/net/providers/EclipseProvider.java
===================================================================
RCS file: src/org/eclipse/core/internal/net/providers/EclipseProvider.java
diff -N src/org/eclipse/core/internal/net/providers/EclipseProvider.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/core/internal/net/providers/EclipseProvider.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,516 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ * IBM Corporation - initial API and implementation
+ * Mark A. Ziesemer - Refactor from ProxyManager to separate extension.
+ *******************************************************************************/
+package org.eclipse.core.internal.net.providers;
+
+import java.net.Authenticator;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.core.internal.net.Activator;
+import org.eclipse.core.internal.net.ProxyChangeEvent;
+import org.eclipse.core.internal.net.ProxyData;
+import org.eclipse.core.internal.net.ProxyManager;
+import org.eclipse.core.internal.net.ProxyType;
+import org.eclipse.core.internal.net.StringMatcher;
+import org.eclipse.core.net.proxy.IProxyChangeEvent;
+import org.eclipse.core.net.proxy.IProxyData;
+import org.eclipse.core.net.proxy.IProxyProviderExtension;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.RegistryFactory;
+import org.eclipse.core.runtime.preferences.ConfigurationScope;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+public class EclipseProvider implements IProxyProviderExtension{
+
+private static final String PREF_HAS_MIGRATED = "org.eclipse.core.net.hasMigrated"; //$NON-NLS-1$
+
+ /**
+ * Preference constants used by Update to record the HTTP proxy
+ */
+ private static String HTTP_PROXY_HOST = "org.eclipse.update.core.proxy.host"; //$NON-NLS-1$
+ private static String HTTP_PROXY_PORT = "org.eclipse.update.core.proxy.port"; //$NON-NLS-1$
+ private static String HTTP_PROXY_ENABLE = "org.eclipse.update.core.proxy.enable"; //$NON-NLS-1$
+
+ private static final String PREF_ENABLED = "proxiesEnabled"; //$NON-NLS-1$
+ private static final String PREF_NON_PROXIED_HOSTS = "nonProxiedHosts"; //$NON-NLS-1$
+
+ private final ProxyType[] proxies = new ProxyType[] {
+ new ProxyType(IProxyData.HTTP_PROXY_TYPE),
+ new ProxyType(IProxyData.HTTPS_PROXY_TYPE),
+ new ProxyType(IProxyData.SOCKS_PROXY_TYPE)
+ };
+
+ private String[] nonProxiedHosts;
+
+ private boolean migrated = false;
+
+ public EclipseProvider(){
+ checkMigrated();
+ // Now initialize each proxy type
+ for (int i = 0; i < proxies.length; i++) {
+ ProxyType type = proxies[i];
+ type.initialize(internalIsProxiesEnabled());
+ }
+ registerAuthenticator();
+ }
+
+ public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
+ throws CoreException{
+ // Nothing to do.
+ }
+
+ public String getName(){
+ return "Eclipse"; //$NON-NLS-1$
+ }
+
+ public IProxyData[] select(URI uri){
+ IProxyData data = getProxyDataForHost(uri.getHost(), uri.getScheme());
+ if(data != null){
+ return resolveType(new IProxyData[]{data});
+ }
+ return new IProxyData[0];
+ }
+
+ private void fireChange(IProxyChangeEvent event){
+ // TODO: Cleanup call to fireChange.
+ ProxyManager.getProxyManager().fireChange(event);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.net.IProxyManager#getNonProxiedHosts()
+ */
+ public synchronized String[] getNonProxiedHosts() {
+ checkMigrated();
+ if (nonProxiedHosts == null) {
+ String prop = Activator.getInstance().getPreferences().get(PREF_NON_PROXIED_HOSTS, "localhost|127.0.0.1"); //$NON-NLS-1$
+ nonProxiedHosts = ProxyType.convertPropertyStringToHosts(prop);
+ }
+ if (nonProxiedHosts.length == 0)
+ return nonProxiedHosts;
+ String[] result = new String[nonProxiedHosts.length];
+ System.arraycopy(nonProxiedHosts, 0, result, 0, nonProxiedHosts.length );
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.net.IProxyManager#setNonProxiedHosts(java.lang.String[])
+ */
+ public void setNonProxiedHosts(String[] hosts) {
+ checkMigrated();
+ Assert.isNotNull(hosts);
+ for (int i = 0; i < hosts.length; i++) {
+ String host = hosts[i];
+ Assert.isNotNull(host);
+ Assert.isTrue(host.length() > 0);
+ }
+ String[] oldHosts = nonProxiedHosts;
+ nonProxiedHosts = hosts;
+ Activator.getInstance().getPreferences().put(PREF_NON_PROXIED_HOSTS, ProxyType.convertHostsToPropertyString(nonProxiedHosts));
+ try {
+ Activator.getInstance().getPreferences().flush();
+ } catch (BackingStoreException e) {
+ Activator.logError(
+ "An error occurred while writing out the non-proxied hosts list", e); //$NON-NLS-1$
+ }
+ IProxyData[] data = getProxyData();
+ IProxyChangeEvent event = new ProxyChangeEvent(IProxyChangeEvent.NONPROXIED_HOSTS_CHANGED, oldHosts, getNonProxiedHosts(), data, new IProxyData[0]);
+ fireChange(event);
+ }
+
+ public IProxyData[] getProxyData() {
+ checkMigrated();
+ IProxyData[] result = new IProxyData[proxies.length];
+ for (int i = 0; i < proxies.length; i++) {
+ ProxyType type = proxies[i];
+ result[i] = type.getProxyData(ProxyType.VERIFY_EQUAL);
+ }
+ return resolveType(result);
+ }
+
+ public void setProxyData(IProxyData[] proxies) {
+ checkMigrated();
+ doSetProxyData(proxies);
+ }
+
+ private void doSetProxyData(IProxyData[] proxyDatas) {
+ IProxyData[] oldData = getProxyData();
+ String[] hosts = getNonProxiedHosts();
+ IProxyData[] changedProxies = internalSetProxyData(proxyDatas);
+ if (changedProxies.length > 0) {
+ IProxyChangeEvent event = new ProxyChangeEvent(IProxyChangeEvent.PROXY_SERVICE_ENABLEMENT_CHANGE, hosts, hosts, oldData, changedProxies);
+ fireChange(event);
+ }
+ }
+
+ private IProxyData[] internalSetProxyData(IProxyData[] proxyDatas) {
+ List result = new ArrayList();
+ for (int i = 0; i < proxyDatas.length; i++) {
+ IProxyData proxyData = proxyDatas[i];
+ ProxyType type = getType(proxyData);
+ if (type != null && type.setProxyData(proxyData, internalIsProxiesEnabled())) {
+ result.add(proxyData);
+ }
+ }
+ return (IProxyData[]) result.toArray(new IProxyData[result.size()]);
+ }
+
+ private ProxyType getType(IProxyData proxyData) {
+ for (int i = 0; i < proxies.length; i++) {
+ ProxyType type = proxies[i];
+ if (type.getName().equals(proxyData.getType())) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.net.IProxyManager#isProxiesEnabled()
+ */
+ public boolean isProxiesEnabled() {
+ checkMigrated();
+ return internalIsProxiesEnabled();
+ }
+
+ private boolean internalIsProxiesEnabled() {
+ return Activator.getInstance().getPreferences().getBoolean(
+ PREF_ENABLED, true);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.net.IProxyManager#setProxiesEnabled(boolean)
+ */
+ public void setProxiesEnabled(boolean enabled) {
+ checkMigrated();
+ boolean current = internalIsProxiesEnabled();
+ if (current == enabled)
+ return;
+ // Setting the preference will trigger the system property update
+ // (see preferenceChange)
+ Activator.getInstance().getPreferences().putBoolean(PREF_ENABLED, enabled);
+ }
+
+ private void internalSetEnabled(boolean enabled) {
+ Properties sysProps = System.getProperties();
+ sysProps.put("proxySet", enabled ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ updateSystemProperties();
+ try {
+ Activator.getInstance().getPreferences().flush();
+ } catch (BackingStoreException e) {
+ Activator.logError(
+ "An error occurred while writing out the enablement state", e); //$NON-NLS-1$
+ }
+ String[] hosts = getNonProxiedHosts();
+ IProxyData[] data = getProxyData();
+ IProxyChangeEvent event = new ProxyChangeEvent(IProxyChangeEvent.PROXY_DATA_CHANGED, hosts, hosts, data, data);
+ fireChange(event);
+ }
+
+ private void updateSystemProperties() {
+ for (int i = 0; i < proxies.length; i++) {
+ ProxyType type = proxies[i];
+ type.updateSystemProperties(internalGetProxyData(type.getName(), ProxyType.DO_NOT_VERIFY), internalIsProxiesEnabled());
+ }
+ }
+
+ public IProxyData getProxyData(String type) {
+ checkMigrated();
+ return resolveType(internalGetProxyData(type, ProxyType.VERIFY_EQUAL));
+ }
+
+ private IProxyData internalGetProxyData(String type, int verifySystemProperties) {
+ for (int i = 0; i < proxies.length; i++) {
+ ProxyType pt = proxies[i];
+ if (pt.getName().equals(type)) {
+ return pt.getProxyData(verifySystemProperties);
+ }
+ }
+ return null;
+ }
+
+ public IProxyData[] getProxyDataForHost(String host) {
+ checkMigrated();
+ if (!internalIsProxiesEnabled()) {
+ return new IProxyData[0];
+ }
+ URI uri = tryGetURI(host);
+ if (uri == null) {
+ return new IProxyData[0];
+ }
+ // TODO: Should probably remove - now in NativeProvider.
+// if (hasSystemProxies() && isSystemProxiesEnabled()) {
+// return resolveType(nativeProxyProvider.select(uri));
+// }
+
+ if (isHostFiltered(uri))
+ return new IProxyData[0];
+ IProxyData[] data = getProxyData();
+ List result = new ArrayList();
+ for (int i = 0; i < data.length; i++) {
+ IProxyData proxyData = data[i];
+ if (proxyData.getHost() != null)
+ result.add(proxyData);
+ }
+ IProxyData ret[] = (IProxyData[]) result.toArray(new IProxyData[result.size()]);
+ return resolveType(ret);
+ }
+
+ public static URI tryGetURI(String host) {
+ try {
+ int i = host.indexOf(":"); //$NON-NLS-1$
+ if (i == -1) {
+ return new URI("//" + host); //$NON-NLS-1$
+ }
+ return new URI(host.substring(i + 1));
+ } catch (URISyntaxException e) {
+ return null;
+ }
+ }
+
+ private boolean isHostFiltered(URI uri) {
+ String[] filters = getNonProxiedHosts();
+ for (int i = 0; i < filters.length; i++) {
+ String filter = filters[i];
+ if (matchesFilter(uri.getHost(), filter))
+ return true;
+ }
+ return false;
+ }
+
+ private boolean matchesFilter(String host, String filter) {
+ StringMatcher matcher = new StringMatcher(filter, true, false);
+ return matcher.match(host);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.net.core.IProxyManager#getProxyDataForHost(java.lang.String, java.lang.String)
+ */
+ public IProxyData getProxyDataForHost(String host, String type) {
+ checkMigrated();
+ if (!internalIsProxiesEnabled()) {
+ return null;
+ }
+ // TODO: Should probably remove - now in NativeProvider.
+// if (hasSystemProxies() && isSystemProxiesEnabled())
+// try {
+// URI uri = new URI(type, "//" + host, null); //$NON-NLS-1$
+// IProxyData[] proxyDatas = nativeProxyProvider.select(uri);
+// return proxyDatas.length > 0 ? resolveType(nativeProxyProvider.select(uri)[0]) : null;
+// } catch (URISyntaxException e) {
+// return null;
+// }
+
+ IProxyData[] data = getProxyDataForHost(host);
+ for (int i = 0; i < data.length; i++) {
+ IProxyData proxyData = data[i];
+ if (proxyData.getType().equalsIgnoreCase(type)
+ && proxyData.getHost() != null)
+ return resolveType(proxyData);
+ }
+ return null;
+ }
+
+ private void registerAuthenticator() {
+ Authenticator a = getPluggedInAuthenticator();
+ if (a != null) {
+ Authenticator.setDefault(a);
+ }
+ }
+
+ private Authenticator getPluggedInAuthenticator() {
+ IExtension[] extensions = RegistryFactory.getRegistry().getExtensionPoint(Activator.ID, Activator.PT_AUTHENTICATOR).getExtensions();
+ if (extensions.length == 0)
+ return null;
+ IExtension extension = extensions[0];
+ IConfigurationElement[] configs = extension.getConfigurationElements();
+ if (configs.length == 0) {
+ Activator.log(IStatus.ERROR, NLS.bind("Authenticator {0} is missing required fields", (new Object[] {extension.getUniqueIdentifier()})), null);//$NON-NLS-1$
+ return null;
+ }
+ try {
+ IConfigurationElement config = configs[0];
+ return (Authenticator) config.createExecutableExtension("class");//$NON-NLS-1$
+ } catch (CoreException ex) {
+ Activator.log(IStatus.ERROR, NLS.bind("Unable to instantiate authenticator {0}", (new Object[] {extension.getUniqueIdentifier()})), ex);//$NON-NLS-1$
+ return null;
+ }
+ }
+
+ private synchronized void checkMigrated() {
+ if (migrated || !Activator.getInstance().instanceLocationAvailable())
+ return;
+
+ migrated = true;
+ if (Activator.getInstance().getPreferences().getBoolean(PREF_HAS_MIGRATED, false))
+ return;
+
+ Activator.getInstance().getPreferences().putBoolean(PREF_HAS_MIGRATED, true);
+ migrateInstanceScopePreferences(new InstanceScope().getNode(""), new ConfigurationScope().getNode(""), true); //$NON-NLS-1$//$NON-NLS-2$
+ }
+
+ void migrateInstanceScopePreferences(Preferences instanceNode, Preferences configurationNode, boolean isInitialize) {
+ migrateUpdateHttpProxy(instanceNode, isInitialize);
+
+ Preferences netInstancePrefs = instanceNode.node(Activator.ID);
+ Preferences netConfigurationPrefs = configurationNode.node(Activator.ID);
+
+ // migrate enabled status
+ if (netConfigurationPrefs.get(PREF_ENABLED, null) == null) {
+ String instanceEnabled = netInstancePrefs.get(PREF_ENABLED, null);
+ if (instanceEnabled != null)
+ netConfigurationPrefs.put(PREF_ENABLED, instanceEnabled);
+ }
+
+ // TODO: Should probably remove - now in NativeProvider.
+ // migrate enabled status
+// if (netConfigurationPrefs.get(PREF_OS, null) == null) {
+// String instanceEnabled = netInstancePrefs.get(PREF_OS, null);
+// if (instanceEnabled != null)
+// netConfigurationPrefs.put(PREF_OS, instanceEnabled);
+// }
+
+ // migrate non proxied hosts if not already set
+ if (netConfigurationPrefs.get(PREF_NON_PROXIED_HOSTS, null) == null) {
+ String instanceNonProxiedHosts = netInstancePrefs.get(PREF_NON_PROXIED_HOSTS, null);
+ if (instanceNonProxiedHosts != null) {
+ netConfigurationPrefs.put(PREF_NON_PROXIED_HOSTS, instanceNonProxiedHosts);
+ nonProxiedHosts = null;
+ }
+ }
+
+ // migrate proxy data
+ boolean proxiesEnabled = netConfigurationPrefs.getBoolean(PREF_ENABLED, true);
+ for (int i = 0; i < proxies.length; i++) {
+ ProxyType type = proxies[i];
+ IProxyData data = type.getProxyData(ProxyType.DO_NOT_VERIFY);
+ if (data.getHost() == null) {
+ ProxyType instanceType = new ProxyType(type.getName(),netInstancePrefs);
+ IProxyData instanceData = instanceType.getProxyData(ProxyType.DO_NOT_VERIFY);
+ if (instanceData.getHost() != null)
+ type.setProxyData(instanceData, proxiesEnabled);
+ }
+ }
+
+ // if this an import we should remove the old node
+ if (! isInitialize) {
+ try {
+ netInstancePrefs.removeNode();
+ } catch (BackingStoreException e) {
+ // ignore
+ }
+ }
+ }
+
+ private void migrateUpdateHttpProxy(Preferences node, boolean isInitialize) {
+ Preferences netPrefs = node.node(Activator.ID);
+ if (!netPrefs.getBoolean(PREF_HAS_MIGRATED, false)) {
+ // Only set the migration bit when initializing
+ if (isInitialize)
+ netPrefs.putBoolean(PREF_HAS_MIGRATED, true);
+ Preferences updatePrefs = node.node("org.eclipse.update.core"); //$NON-NLS-1$
+ String httpProxyHost = getHostToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
+ int port = getPortToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
+ boolean httpProxyEnable = getEnablementToMigrate(updatePrefs, isInitialize /* checkSystemProperties */);
+ if (httpProxyHost != null) {
+ ProxyData proxyData = new ProxyData(IProxyData.HTTP_PROXY_TYPE,
+ httpProxyHost, port, false, null);
+ ProxyType type = getType(proxyData);
+ type.updatePreferencesIfMissing(netPrefs, proxyData);
+ if (httpProxyEnable) {
+ netPrefs.putBoolean(PREF_ENABLED, true);
+ }
+ }
+ }
+ }
+
+ private boolean getEnablementToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
+ boolean httpProxyEnable = false;
+ if (checkSystemProperties && updatePrefs.get(HTTP_PROXY_ENABLE, null) == null) {
+ httpProxyEnable = Boolean.getBoolean("http.proxySet"); //$NON-NLS-1$
+ } else {
+ httpProxyEnable = updatePrefs.getBoolean(HTTP_PROXY_ENABLE, false);
+ updatePrefs.remove(HTTP_PROXY_ENABLE);
+ }
+ return httpProxyEnable;
+ }
+
+ private int getPortToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
+ String httpProxyPort = updatePrefs.get(HTTP_PROXY_PORT, ""); //$NON-NLS-1$
+ if (checkSystemProperties && "".equals(httpProxyPort)) { //$NON-NLS-1$
+ httpProxyPort = System.getProperty("http.proxyPort", ""); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ updatePrefs.remove(HTTP_PROXY_PORT);
+ int port = -1;
+ if (httpProxyPort != null && !"".equals(httpProxyPort)) //$NON-NLS-1$
+ try {
+ port = Integer.parseInt(httpProxyPort);
+ } catch (NumberFormatException e) {
+ // Ignore
+ }
+ return port;
+ }
+
+ private String getHostToMigrate(Preferences updatePrefs, boolean checkSystemProperties) {
+ String httpProxyHost = updatePrefs.get(HTTP_PROXY_HOST, ""); //$NON-NLS-1$
+ if (checkSystemProperties && "".equals(httpProxyHost)) { //$NON-NLS-1$
+ httpProxyHost = System.getProperty("http.proxyHost", ""); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ if ("".equals(httpProxyHost)) //$NON-NLS-1$
+ httpProxyHost = null;
+ updatePrefs.remove(HTTP_PROXY_HOST);
+ return httpProxyHost;
+ }
+
+ public void preferenceChange(PreferenceChangeEvent event) {
+ if (event.getKey().equals(PREF_ENABLED)) {
+ checkMigrated();
+ internalSetEnabled(Activator.getInstance().getPreferences().getBoolean(PREF_ENABLED, true));
+ }
+ }
+
+ public IProxyData resolveType(IProxyData data) {
+ if (data == null) {
+ return null;
+ }
+ ProxyData d = (ProxyData) data;
+ if (d.getType().equalsIgnoreCase(IProxyData.HTTP_PROXY_TYPE)) {
+ d.setType(IProxyData.HTTP_PROXY_TYPE);
+ } else if (d.getType().equalsIgnoreCase(IProxyData.HTTPS_PROXY_TYPE)) {
+ d.setType(IProxyData.HTTPS_PROXY_TYPE);
+ } else if (d.getType().equalsIgnoreCase(IProxyData.SOCKS_PROXY_TYPE)) {
+ d.setType(IProxyData.SOCKS_PROXY_TYPE);
+ }
+ return d;
+ }
+
+ public IProxyData[] resolveType(IProxyData[] data) {
+ if (data == null) {
+ return null;
+ }
+ for (int i = 0; i < data.length; i++) {
+ resolveType(data[i]);
+ }
+ return data;
+ }
+
+}
Index: src/org/eclipse/core/net/proxy/IProxyProviderExtension.java
===================================================================
RCS file: src/org/eclipse/core/net/proxy/IProxyProviderExtension.java
diff -N src/org/eclipse/core/net/proxy/IProxyProviderExtension.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/core/net/proxy/IProxyProviderExtension.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Mark A. Ziesemer 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:
+ * Mark A. Ziesemer - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.core.net.proxy;
+
+import org.eclipse.core.runtime.IExecutableExtension;
+
+public interface IProxyProviderExtension extends IExecutableExtension, IProxyProvider{
+ // Currently parent interfaces only.
+}
#P org.eclipse.ui.net
Index: src/org/eclipse/ui/internal/net/ProxyPreferencePage.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java,v
retrieving revision 1.15
diff -u -r1.15 ProxyPreferencePage.java
--- src/org/eclipse/ui/internal/net/ProxyPreferencePage.java 20 Nov 2008 15:50:07 -0000 1.15
+++ src/org/eclipse/ui/internal/net/ProxyPreferencePage.java 10 Dec 2008 02:46:15 -0000
@@ -18,11 +18,23 @@
*******************************************************************************/
package org.eclipse.ui.internal.net;
-import org.eclipse.core.internal.net.ProxySelector;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.internal.net.ProxyManager;
+import org.eclipse.core.net.proxy.IProxyProvider;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.RegistryFactory;
+import org.eclipse.core.runtime.Status;
import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
@@ -35,13 +47,24 @@
public class ProxyPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
-
+
private static final String PROXY_PREFERENCE_PAGE_CONTEXT_ID = "org.eclipse.ui.net.proxy_preference_page_context"; //$NON-NLS-1$
+
+ protected ProxyManager proxyManager = ProxyManager.getProxyManager();
+
+ // Cache as long as the page is open.
+ protected IProxyProvider[] providers;
+ protected IProxyProviderConfigUIExtension[] uiExtensions;
+ protected IProxyProviderConfigUIExtension currentUiExtension;
+ protected Composite extensionComposite;
private Label providerLabel;
protected Combo providerCombo;
- private ProxyEntriesComposite proxyEntriesComposite;
- private NonProxyHostsComposite nonProxyHostsComposite;
+
+ public void init(IWorkbench workbench) {
+ providers = proxyManager.getProviders();
+ uiExtensions = getUIExtensions();
+ }
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
@@ -51,8 +74,8 @@
composite.setLayout(layout);
createProviderComposite(composite);
- createProxyEntriesComposite(composite);
- createNonProxiedHostsComposite(composite);
+ this.extensionComposite = new Composite(composite, SWT.NONE);
+ this.extensionComposite.setLayout(new FillLayout());
// Adding help accessible by F1
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
@@ -72,53 +95,115 @@
providerCombo = new Combo(composite, SWT.READ_ONLY | SWT.DROP_DOWN);
providerCombo.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
- setProvider(providerCombo.getText());
+ setProvider(providerCombo.getSelectionIndex());
}
});
}
- private void createProxyEntriesComposite(Composite parent) {
- proxyEntriesComposite = new ProxyEntriesComposite(parent, SWT.NONE);
- proxyEntriesComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
- true, true));
- }
-
- private void createNonProxiedHostsComposite(Composite parent) {
- nonProxyHostsComposite = new NonProxyHostsComposite(parent, SWT.NONE);
- nonProxyHostsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
- true, true));
- }
-
- public void init(IWorkbench workbench) {
- // Nothing to do
- }
-
- protected void performApply() {
+ protected void performApply(){
+ if(currentUiExtension != null){
+ currentUiExtension.performApply();
+ }
int sel = providerCombo.getSelectionIndex();
- ProxySelector.setDefaultProvider(providerCombo.getItem(sel));
- proxyEntriesComposite.performApply();
- nonProxyHostsComposite.performApply();
+ proxyManager.setProvider(providers[sel]);
}
- protected void performDefaults() {
- providerCombo.select(1);
- setProvider(providerCombo.getItem(1));
+ protected void performDefaults(){
+ // providerCombo.select(1);
+ // setProvider(1);
+ if(currentUiExtension != null){
+ currentUiExtension.performDefaults();
+ }
}
- public boolean performOk() {
+ public boolean performOk(){
+ if(currentUiExtension != null){
+ if(!currentUiExtension.performOk()){
+ return false;
+ }
+ }
performApply();
return super.performOk();
}
private void initializeValues() {
- providerCombo.setItems(ProxySelector.getProviders());
- providerCombo.select(providerCombo.indexOf(ProxySelector
- .getDefaultProvider()));
- }
-
- protected void setProvider(String name) {
- proxyEntriesComposite.setProvider(name);
- nonProxyHostsComposite.setProvider(name);
+ String items[] = new String[providers.length];
+ int selIndex = 0;
+ IProxyProvider currentProvider = proxyManager.getProvider();
+ for(int i=0; i
+
@@ -25,5 +26,11 @@
class="org.eclipse.ui.internal.net.auth.NetAuthenticator">
+
+
+
+
Index: src/org/eclipse/ui/internal/net/AbstractProxyProviderConfigUIExtension.java
===================================================================
RCS file: src/org/eclipse/ui/internal/net/AbstractProxyProviderConfigUIExtension.java
diff -N src/org/eclipse/ui/internal/net/AbstractProxyProviderConfigUIExtension.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/ui/internal/net/AbstractProxyProviderConfigUIExtension.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Mark A. Ziesemer 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:
+ * Mark A. Ziesemer - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.net;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.ui.IWorkbench;
+
+public abstract class AbstractProxyProviderConfigUIExtension implements IProxyProviderConfigUIExtension{
+
+ public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
+ throws CoreException{
+ // Nothing to do.
+ }
+
+ public void init(IWorkbench workbench){
+ // Nothing to do.
+ }
+
+ public void performApply(){
+ // Nothing to do.
+ }
+
+ public void performDefaults(){
+ // Nothing to do.
+ }
+
+ public boolean performOk(){
+ return true;
+ }
+
+}
Index: src/org/eclipse/ui/internal/net/IProxyProviderConfigUIExtension.java
===================================================================
RCS file: src/org/eclipse/ui/internal/net/IProxyProviderConfigUIExtension.java
diff -N src/org/eclipse/ui/internal/net/IProxyProviderConfigUIExtension.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/ui/internal/net/IProxyProviderConfigUIExtension.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Mark A. Ziesemer 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:
+ * Mark A. Ziesemer - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.net;
+
+import org.eclipse.core.net.proxy.IProxyProvider;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public interface IProxyProviderConfigUIExtension extends IExecutableExtension{
+
+ public static final String EXTENSION_POINT_NAME = "provider"; //$NON-NLS-1$
+
+ // TODO: There has to be a better way of receiving these events instead of copying relevant API.
+
+ /**
+ * (protected) see PreferencePage#performDefaults()
+ */
+ void performDefaults();
+
+ /**
+ * (protected) see PreferencePage#performApply()
+ */
+ void performApply();
+
+ /**
+ * @see IWorkbenchPreferencePage#performOk()
+ * @return (see above)
+ */
+ boolean performOk();
+
+
+ /**
+ * Returns the {@link IProxyProvider} that this UI configures.
+ * @return The {@link IProxyProvider} that this UI configures.
+ */
+ Class getProxyProviderClass();
+
+ void createProviderComposite(Composite parentComposite, ProxyPreferencePage parentPage);
+}
Index: src/org/eclipse/ui/internal/net/EclipseProviderPreferencePage.java
===================================================================
RCS file: src/org/eclipse/ui/internal/net/EclipseProviderPreferencePage.java
diff -N src/org/eclipse/ui/internal/net/EclipseProviderPreferencePage.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/ui/internal/net/EclipseProviderPreferencePage.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Mark A. Ziesemer 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:
+ * Mark A. Ziesemer - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.net;
+
+import org.eclipse.core.internal.net.providers.EclipseProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+public class EclipseProviderPreferencePage extends AbstractProxyProviderConfigUIExtension{
+
+ private ProxyEntriesComposite proxyEntriesComposite;
+ private NonProxyHostsComposite nonProxyHostsComposite;
+
+ public Class getProxyProviderClass(){
+ return EclipseProvider.class;
+ }
+
+ public void createProviderComposite(Composite parentComposite, ProxyPreferencePage parentPage){
+ createProxyEntriesComposite(parentComposite);
+ createNonProxiedHostsComposite(parentComposite);
+ }
+
+ private void createProxyEntriesComposite(Composite parent) {
+ proxyEntriesComposite = new ProxyEntriesComposite(parent, SWT.NONE);
+ proxyEntriesComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
+ true, true));
+ }
+
+ private void createNonProxiedHostsComposite(Composite parent) {
+ nonProxyHostsComposite = new NonProxyHostsComposite(parent, SWT.NONE);
+ nonProxyHostsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
+ true, true));
+ }
+
+ public void performApply(){
+ proxyEntriesComposite.performApply();
+ nonProxyHostsComposite.performApply();
+ }
+
+}
Index: schema/provider.exsd
===================================================================
RCS file: schema/provider.exsd
diff -N schema/provider.exsd
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ schema/provider.exsd 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+ Extension point to provide different proxy ui configuration implementations.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [Enter the first release in which this extension point appears.]
+
+
+
+
+
+
+
+
+ [Enter extension point usage example here.]
+
+
+
+
+
+
+
+
+ [Enter API information here.]
+
+
+
+
+
+
+
+
+ [Enter information about supplied implementation of this extension point.]
+
+
+
+
+