Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java')
-rw-r--r--bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java404
1 files changed, 215 insertions, 189 deletions
diff --git a/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java b/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java
index ffd4f40eb..181017c37 100644
--- a/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java
+++ b/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyPreferencePage.java
@@ -13,6 +13,7 @@
* 20070201 154100 pmoogk@ca.ibm.com - Peter Moogk, Port internet code from WTP to Eclipse base.
* 20070219 174674 pmoogk@ca.ibm.com - Peter Moogk
* 20070402 180622 brockj@tpg.com.au - Brock Janiczak, Inconsistent enablement states in network preference page
+ * 20070416 177897 ymnk@jcraft.com - Atsuhiko Yamanaka, Improve UI of Proxy Preferences Page
*******************************************************************************/
package org.eclipse.ui.internal.net;
@@ -31,30 +32,18 @@ import org.eclipse.ui.IWorkbenchPreferencePage;
public class ProxyPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
- IProxyData[] proxyData;
Entry[] entryList;
-
Button directConnectionToButton;
-
private Button manualProxyConfigurationButton;
-
Button useSameProxyButton;
-
private Label nonHostLabel;
-
private NonProxyHostsComposite nonHostComposite;
-
Button enableProxyAuth;
-
private Label useridLabel;
-
private Label passwordLabel;
-
Text userid;
-
Text password;
-
private IProxyService proxyService;
public ProxyPreferencePage() {
@@ -74,8 +63,13 @@ public class ProxyPreferencePage extends PreferencePage implements
l.setText(NetUIMessages.ProxyPreferencePage_40);
return l;
}
- proxyData = proxyService.getProxyData();
+
+ IProxyData[] proxyData = proxyService.getProxyData();
entryList = new Entry[proxyData.length];
+ for (int i = 0; i < proxyData.length; i++) {
+ IProxyData pd = proxyData[i];
+ entryList[i] = new Entry(pd);
+ }
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
@@ -115,7 +109,7 @@ public class ProxyPreferencePage extends PreferencePage implements
gridData_2.horizontalIndent = 17;
manualProxyConfigurationComposite.setLayoutData(gridData_2);
- addProtocolEntry(manualProxyConfigurationComposite, 0);
+ entryList[0].addProtocolEntry(manualProxyConfigurationComposite);
new Label(manualProxyConfigurationComposite, SWT.NONE);
useSameProxyButton = new Button(manualProxyConfigurationComposite,
@@ -124,26 +118,24 @@ public class ProxyPreferencePage extends PreferencePage implements
GridData gridData = new GridData();
gridData.horizontalSpan = 3;
useSameProxyButton.setLayoutData(gridData);
- useSameProxyButton
- .setToolTipText(NetUIMessages.ProxyPreferencePage_23);
+ useSameProxyButton.setToolTipText(NetUIMessages.ProxyPreferencePage_23);
useSameProxyButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
- handleUseSameProtocol(false);
+ toggleUseSameProtocol();
}
});
- for (int index = 1; index < proxyData.length; index++) {
- addProtocolEntry(manualProxyConfigurationComposite, index);
+ for (int index = 1; index < entryList.length; index++) {
+ entryList[index]
+ .addProtocolEntry(manualProxyConfigurationComposite);
}
Label separator = new Label(manualProxyConfigurationComposite,
SWT.HORIZONTAL | SWT.SEPARATOR);
separator.setLayoutData(newGridData(4, 5, true, false));
- nonHostLabel = new Label(manualProxyConfigurationComposite,
- SWT.NONE);
+ nonHostLabel = new Label(manualProxyConfigurationComposite, SWT.NONE);
nonHostLabel.setText(NetUIMessages.ProxyPreferencePage_6);
- nonHostLabel
- .setToolTipText(NetUIMessages.ProxyPreferencePage_24);
+ nonHostLabel.setToolTipText(NetUIMessages.ProxyPreferencePage_24);
nonHostLabel.setLayoutData(newGridData(4, 5, true, false));
nonHostComposite = new NonProxyHostsComposite(
manualProxyConfigurationComposite, SWT.NONE);
@@ -156,8 +148,7 @@ public class ProxyPreferencePage extends PreferencePage implements
SWT.CHECK);
enableProxyAuth.setText(NetUIMessages.ProxyPreferencePage_7);
enableProxyAuth.setLayoutData(newGridData(4, 5, true, false));
- enableProxyAuth
- .setToolTipText(NetUIMessages.ProxyPreferencePage_25);
+ enableProxyAuth.setToolTipText(NetUIMessages.ProxyPreferencePage_25);
enableProxyAuth.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
enableUseridPassword(enableProxyAuth.getSelection());
@@ -185,31 +176,20 @@ public class ProxyPreferencePage extends PreferencePage implements
password.setToolTipText(NetUIMessages.ProxyPreferencePage_27);
password.setEchoChar('*');
- ModifyListener modifyListener = new ModifyListener()
- {
- public void modifyText(ModifyEvent e)
- {
- if( useSameProxyButton.getSelection() )
- {
- Entry httpEntry = entryList[0];
- String httpHostname = httpEntry.hostname.getText();
- String httpPort = httpEntry.port.getText();
-
- for( int index = 1; index < entryList.length; index++ )
- {
- Entry entry = entryList[index];
-
- entry.hostname.setText( httpHostname );
- entry.port.setText( httpPort );
- }
- }
- }
- };
-
- entryList[0].hostname.addModifyListener( modifyListener );
- entryList[0].port.addModifyListener( modifyListener );
-
- restoreState(proxyService.isProxiesEnabled());
+ ModifyListener modifyListener = new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ if (useSameProxyButton.getSelection()) {
+ for (int index = 1; index < entryList.length; index++) {
+ entryList[index].copyValuesFrom(entryList[0]);
+ }
+ }
+ }
+ };
+
+ entryList[0].hostname.addModifyListener(modifyListener);
+ entryList[0].port.addModifyListener(modifyListener);
+
+ initializeValues(proxyService.isProxiesEnabled());
applyDialogFont(composite);
return composite;
@@ -221,8 +201,10 @@ public class ProxyPreferencePage extends PreferencePage implements
boolean proxiesEnabled = manualProxyConfigurationButton.getSelection();
// Save the contents of the text fields to the proxy data.
+ IProxyData[] proxyData = new IProxyData[entryList.length];
for (int index = 0; index < entryList.length; index++) {
entryList[index].applyValues();
+ proxyData[index] = entryList[index].getProxy();
}
proxyService.setProxiesEnabled(proxiesEnabled);
@@ -245,12 +227,7 @@ public class ProxyPreferencePage extends PreferencePage implements
enableProxyAuth.setSelection(false);
for (int index = 0; index < entryList.length; index++) {
- Entry entry = entryList[index];
-
- entry.hostname.setText(""); //$NON-NLS-1$
- entry.port.setText(""); //$NON-NLS-1$
- entry.prevHostname = ""; //$NON-NLS-1$
- entry.prevPort = -1;
+ entryList[index].reset();
}
nonHostComposite.setList(new String[] { "localhost", "127.0.0.1" }); //$NON-NLS-1$ //$NON-NLS-2$
@@ -270,7 +247,7 @@ public class ProxyPreferencePage extends PreferencePage implements
*
* @param proxiesEnabled indicates if manual proxies are enabled or not.
*/
- private void restoreState(boolean proxiesEnabled) {
+ private void initializeValues(boolean proxiesEnabled) {
directConnectionToButton.setSelection(!proxiesEnabled);
manualProxyConfigurationButton.setSelection(proxiesEnabled);
@@ -286,18 +263,6 @@ public class ProxyPreferencePage extends PreferencePage implements
this.userid.setText(""); //$NON-NLS-1$
this.password.setText(""); //$NON-NLS-1$
} else {
- boolean useSameProtocol = true;
- for (int i = 1; i < proxyData.length; i++) {
- IProxyData data = proxyData[i];
- boolean same = (hostsEqual(data.getHost(), proxyData[0]
- .getHost()) && portsEqual(data.getPort(), proxyData[0]
- .getPort()));
- if (!same) {
- useSameProtocol = false;
- break;
- }
- }
- this.useSameProxyButton.setSelection(useSameProtocol);
IProxyData data = entryList[0].getProxy();
this.enableProxyAuth.setSelection(data.isRequiresAuthentication());
this.userid.setText(data.getUserId() == null ? "" : data //$NON-NLS-1$
@@ -305,37 +270,28 @@ public class ProxyPreferencePage extends PreferencePage implements
this.password.setText(data.getPassword() == null ? "" : data //$NON-NLS-1$
.getPassword());
- // TODO: Why does this loop from 1 and not 0?
- for (int index = 1; index < entryList.length; index++) {
- entryList[index].restoreValues();
+ }
+ boolean useSameProtocol = true;
+ for (int i = 1; i < entryList.length; i++) {
+ Entry entry = entryList[i];
+ if (!entry.isUseSameProtocol(entryList[0])) {
+ useSameProtocol = false;
+ break;
}
}
+ this.useSameProxyButton.setSelection(useSameProtocol);
+ for (int index = 1; index < entryList.length; index++) {
+ Entry entry = entryList[index];
+ entry.loadPreviousValues();
+ entry.updateEnablement(proxiesEnabled, useSameProtocol);
+ }
enableControls(proxiesEnabled);
- handleUseSameProtocol(true);
- }
-
- private boolean portsEqual(int port1, int port2) {
- return port1 == port2;
- }
-
- private boolean hostsEqual(String host1, String host2) {
- if (host1 == host2)
- // If there are no hosts, don't enable the use same hosts button
- return false;
- if (host1 == null || host2 == null)
- return false;
- return host1.equals(host2);
}
void enableControls(boolean enabled) {
for (int index = 0; index < entryList.length; index++) {
- Entry entry = entryList[index];
-
- entry.hostname.setEnabled((index == 0 && enabled) || (index != 0 && !useSameProxyButton.getSelection() && enabled));
- entry.nameLabel.setEnabled((index == 0 && enabled) || (index != 0 && !useSameProxyButton.getSelection() && enabled));
- entry.portLabel.setEnabled((index == 0 && enabled) || (index != 0 && !useSameProxyButton.getSelection() && enabled));
- entry.port.setEnabled((index == 0 && enabled) || (index != 0 && !useSameProxyButton.getSelection() && enabled));
+ entryList[index].updateEnablement(enabled, useSameProxyButton.getSelection());
}
useSameProxyButton.setEnabled(enabled);
@@ -353,95 +309,13 @@ public class ProxyPreferencePage extends PreferencePage implements
password.setEnabled(enabled);
}
- void handleUseSameProtocol(boolean init) {
- String httpHostname = entryList[0].hostname.getText();
- String httpPort = entryList[0].port.getText();
- boolean proxiesEnabled = manualProxyConfigurationButton.getSelection();
+ protected void toggleUseSameProtocol() {
boolean useSameProtocol = useSameProxyButton.getSelection();
- boolean controlEnabled = proxiesEnabled && !useSameProtocol;
-
for (int index = 1; index < entryList.length; index++) {
- Entry entry = entryList[index];
-
- entry.hostname.setEnabled(controlEnabled);
- entry.nameLabel.setEnabled(controlEnabled);
- entry.portLabel.setEnabled(controlEnabled);
- entry.port.setEnabled(controlEnabled);
-
- if (useSameProtocol) {
- if (!init) {
- entry.prevHostname = entry.hostname.getText();
- try {
- entry.prevPort = Integer.parseInt(entry.port.getText());
- } catch (NumberFormatException e) {
- entry.prevPort = -1;
- }
- }
-
- entry.hostname.setText(httpHostname);
- entry.port.setText(httpPort);
- } else {
- if (!init) {
- entry.hostname.setText(entry.prevHostname);
- entry.port.setText(entry.prevPort == -1 ? "" : String //$NON-NLS-1$
- .valueOf(entry.prevPort));
- }
- }
+ entryList[index].setUseSameProtocol(useSameProtocol, entryList[0]);
}
}
- private void addProtocolEntry(Composite parent, int index) {
- Entry entry = new Entry(index);
- GridData gridData = null;
- IProxyData proxy = entry.getProxy();
- String name = getLabel(proxy);
-
- String hostname = proxy.getHost();
- if (hostname == null) {
- hostname = ""; //$NON-NLS-1$
- }
-
- int portInt = proxy.getPort();
- String port;
- if (portInt == -1) {
- port = ""; //$NON-NLS-1$
- } else {
- port = String.valueOf(portInt);
- }
-
- entry.nameLabel = new Label(parent, SWT.NONE);
- entry.nameLabel.setText(name);
-
- entry.hostname = new Text(parent, SWT.BORDER);
- gridData = new GridData(GridData.FILL_HORIZONTAL);
- gridData.widthHint = 120;
- entry.hostname.setLayoutData(gridData);
- entry.hostname.setText(hostname);
-
- entry.portLabel = new Label(parent, SWT.NONE);
- entry.portLabel.setText(NetUIMessages.ProxyPreferencePage_22);
-
- entry.port = new Text(parent, SWT.BORDER);
- gridData = new GridData(GridData.FILL_HORIZONTAL);
- gridData.widthHint = 50;
- entry.port.setLayoutData(gridData);
- entry.port.setText(port);
- entryList[index] = entry;
- }
-
- private String getLabel(IProxyData data) {
- if (data.getType().equals(IProxyData.HTTP_PROXY_TYPE)) {
- return NetUIMessages.ProxyPreferencePage_37;
- }
- if (data.getType().equals(IProxyData.HTTPS_PROXY_TYPE)) {
- return NetUIMessages.ProxyPreferencePage_38;
- }
- if (data.getType().equals(IProxyData.SOCKS_PROXY_TYPE)) {
- return NetUIMessages.ProxyPreferencePage_39;
- }
- return ""; //$NON-NLS-1$
- }
-
private GridData newGridData(int span, int verticalIndent,
boolean horizontal, boolean vertical) {
int style = 0;
@@ -464,32 +338,114 @@ public class ProxyPreferencePage extends PreferencePage implements
private class Entry {
Label nameLabel;
-
Text hostname;
-
- String prevHostname;
-
Label portLabel;
-
Text port;
-
+ String prevHostname;
int prevPort;
+ private final IProxyData proxyData;
- private int proxyIndex;
+ public Entry(IProxyData proxyData) {
+ this.proxyData = proxyData;
+ }
- public Entry(int index) {
- this.proxyIndex = index;
+ public void updateEnablement(boolean proxiesEnabled, boolean useSameProtocol) {
+ if (isHttpProxy()) {
+ setEnabled(proxiesEnabled);
+ } else {
+ if (proxiesEnabled) {
+ setUseSameProtocol(useSameProtocol);
+ } else {
+ setEnabled(false);
+ }
+ }
}
- public IProxyData getProxy() {
- return proxyData[proxyIndex];
+ public void setUseSameProtocol(boolean useSameProtocol, Entry httpEntry) {
+ setUseSameProtocol(useSameProtocol);
+ if (isSocksProxy() || isHttpProxy())
+ return;
+ if (useSameProtocol) {
+ recordPreviousValues();
+ copyValuesFrom(entryList[0]);
+ } else {
+ restorePreviousValues();
+ }
+ }
+
+ public void setUseSameProtocol(boolean useSameProtocol) {
+ if (isSocksProxy()) {
+ setEnabled(true);
+ } else {
+ setEnabled(!useSameProtocol);
+ }
}
- public void restoreValues() {
+ public void loadPreviousValues() {
IProxyData proxy = getProxy();
prevHostname = proxy.getHost();
prevPort = proxy.getPort();
}
+
+ public void restorePreviousValues() {
+ hostname.setText(prevHostname);
+ port.setText(prevPort == -1 ? "" : String //$NON-NLS-1$
+ .valueOf(prevPort));
+ }
+
+ public void recordPreviousValues() {
+ prevHostname = hostname.getText();
+ try {
+ prevPort = Integer.parseInt(port.getText());
+ } catch (NumberFormatException e) {
+ prevPort = -1;
+ }
+ }
+
+ /**
+ * The user has chosen to use the same entry for all protocols
+ * @param entry the entry (the http entry to be exact)
+ */
+ public void copyValuesFrom(Entry entry) {
+ // For SOCKS, don't use the general entry
+ if (!isSocksProxy()){
+ hostname.setText( entry.hostname.getText() );
+ port.setText( entry.port.getText() );
+ }
+ }
+
+ public boolean isUseSameProtocol(Entry entry) {
+ // Always answer true for the SOCKS proxy since we never disable
+ if (isSocksProxy())
+ return true;
+ return (hostsEqual(proxyData.getHost(), entry.getProxy().getHost())
+ && portsEqual(proxyData.getPort(), entry.getProxy().getPort()));
+ }
+
+ private boolean portsEqual(int port1, int port2) {
+ return port1 == port2;
+ }
+
+ private boolean hostsEqual(String host1, String host2) {
+ if (host1 == host2)
+ // If there are no hosts, don't enable the use same hosts button
+ return false;
+ if (host1 == null || host2 == null)
+ return false;
+ return host1.equals(host2);
+ }
+
+ boolean isSocksProxy() {
+ return getProxy().getType().equals(IProxyData.SOCKS_PROXY_TYPE);
+ }
+
+ boolean isHttpProxy() {
+ return getProxy().getType().equals(IProxyData.HTTP_PROXY_TYPE);
+ }
+
+ public IProxyData getProxy() {
+ return proxyData;
+ }
public void applyValues() {
IProxyData proxy = getProxy();
@@ -497,13 +453,14 @@ public class ProxyPreferencePage extends PreferencePage implements
String hostString;
String portString;
- if (useSameProxyButton.getSelection()) {
+ if (useSameProxyButton.getSelection() && !isSocksProxy()) {
hostString = entryList[0].hostname.getText();
portString = entryList[0].port.getText();
} else {
hostString = hostname.getText();
portString = port.getText();
}
+
proxy.setHost(hostString);
try {
int port = Integer.valueOf(portString).intValue();
@@ -514,5 +471,74 @@ public class ProxyPreferencePage extends PreferencePage implements
proxy.setUserid(enableAuth ? userid.getText() : null);
proxy.setPassword(enableAuth ? password.getText() : null);
}
+
+ public void addProtocolEntry(Composite parent) {
+ GridData gridData;
+ IProxyData proxy = getProxy();
+
+ nameLabel = new Label(parent, SWT.NONE);
+ nameLabel.setText(getLabel(proxy));
+
+ hostname = new Text(parent, SWT.BORDER);
+ gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.widthHint = 120;
+ hostname.setLayoutData(gridData);
+ hostname.setText(getHostName(proxy));
+
+ portLabel = new Label(parent, SWT.NONE);
+ portLabel.setText(NetUIMessages.ProxyPreferencePage_22);
+
+ port = new Text(parent, SWT.BORDER);
+ gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.widthHint = 50;
+ port.setLayoutData(gridData);
+ port.setText(getPortString(proxy));
+ }
+
+ private String getLabel(IProxyData data) {
+ if (data.getType().equals(IProxyData.HTTP_PROXY_TYPE)) {
+ return NetUIMessages.ProxyPreferencePage_37;
+ }
+ if (data.getType().equals(IProxyData.HTTPS_PROXY_TYPE)) {
+ return NetUIMessages.ProxyPreferencePage_38;
+ }
+ if (data.getType().equals(IProxyData.SOCKS_PROXY_TYPE)) {
+ return NetUIMessages.ProxyPreferencePage_39;
+ }
+ return ""; //$NON-NLS-1$
+ }
+
+ private String getPortString(IProxyData proxy) {
+ int portInt = proxy.getPort();
+ String portString;
+ if (portInt == -1) {
+ portString = ""; //$NON-NLS-1$
+ } else {
+ portString = String.valueOf(portInt);
+ }
+ return portString;
+ }
+
+ private String getHostName(IProxyData proxy) {
+ String hostnameString = proxy.getHost();
+ if (hostnameString == null) {
+ hostnameString = ""; //$NON-NLS-1$
+ }
+ return hostnameString;
+ }
+
+ public void reset() {
+ hostname.setText(""); //$NON-NLS-1$
+ port.setText(""); //$NON-NLS-1$
+ prevHostname = ""; //$NON-NLS-1$
+ prevPort = -1;
+ }
+
+ private void setEnabled(boolean enabled) {
+ hostname.setEnabled(enabled);
+ nameLabel.setEnabled(enabled);
+ portLabel.setEnabled(enabled);
+ port.setEnabled(enabled);
+ }
}
}

Back to the top