source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/ProxyPreferences.java@ 2648

Last change on this file since 2648 was 2648, checked in by stoecker, 14 years ago

use context for tr()

File size: 11.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5import static org.openstreetmap.josm.tools.I18n.trc;
6
7import java.awt.Dimension;
8import java.awt.GridBagConstraints;
9import java.awt.GridBagLayout;
10import java.awt.Insets;
11import java.awt.event.ItemEvent;
12import java.awt.event.ItemListener;
13import java.net.ProxySelector;
14import java.util.HashMap;
15import java.util.Map;
16
17import javax.swing.ButtonGroup;
18import javax.swing.JLabel;
19import javax.swing.JPanel;
20import javax.swing.JPasswordField;
21import javax.swing.JRadioButton;
22import javax.swing.JSeparator;
23import javax.swing.JTextField;
24import javax.swing.SwingConstants;
25
26import org.openstreetmap.josm.Main;
27import org.openstreetmap.josm.gui.JMultilineLabel;
28import org.openstreetmap.josm.io.DefaultProxySelector;
29import org.openstreetmap.josm.tools.GBC;
30
31public class ProxyPreferences implements PreferenceSetting {
32
33
34
35 public static class Factory implements PreferenceSettingFactory {
36 public PreferenceSetting createPreferenceSetting() {
37 return new ProxyPreferences();
38 }
39 }
40
41 public enum ProxyPolicy {
42 NO_PROXY("no-proxy"),
43 USE_SYSTEM_SETTINGS("use-system-settings"),
44 USE_HTTP_PROXY("use-http-proxy"),
45 USE_SOCKS_PROXY("use-socks-proxy");
46
47 private String policyName;
48 ProxyPolicy(String policyName) {
49 this.policyName = policyName;
50 }
51
52 public String getName() {
53 return policyName;
54 }
55
56 static public ProxyPolicy fromName(String policyName) {
57 if (policyName == null) return null;
58 policyName = policyName.trim().toLowerCase();
59 for(ProxyPolicy pp: values()) {
60 if (pp.getName().equals(policyName))
61 return pp;
62 }
63 return null;
64 }
65 }
66
67 public static final String PROXY_POLICY = "proxy.policy";
68 public static final String PROXY_HTTP_HOST = "proxy.http.host";
69 public static final String PROXY_HTTP_PORT = "proxy.http.port";
70 public static final String PROXY_SOCKS_HOST = "proxy.socks.host";
71 public static final String PROXY_SOCKS_PORT = "proxy.socks.port";
72 public static final String PROXY_USER = "proxy.user";
73 public static final String PROXY_PASS = "proxy.pass";
74
75 private ButtonGroup bgProxyPolicy;
76 private Map<ProxyPolicy, JRadioButton> rbProxyPolicy;
77 private JTextField tfProxyHttpHost;
78 private JTextField tfProxyHttpPort;
79 private JTextField tfProxySocksHost;
80 private JTextField tfProxySocksPort;
81 private JTextField tfProxyHttpUser;
82 private JPasswordField tfProxyHttpPassword;
83
84 protected JPanel buildHttpProxyConfigurationPanel() {
85 JPanel pnl = new JPanel(new GridBagLayout()) {
86 @Override
87 public Dimension getMinimumSize() {
88 return getPreferredSize();
89 }
90 };
91 GridBagConstraints gc = new GridBagConstraints();
92
93 gc.anchor = GridBagConstraints.WEST;
94 gc.insets = new Insets(5,5,0,0);
95 pnl.add(new JLabel(tr("Host:")), gc);
96
97 gc.gridx = 1;
98 pnl.add(tfProxyHttpHost = new JTextField(20),gc);
99
100 gc.gridy = 1;
101 gc.gridx = 0;
102 pnl.add(new JLabel(trc("server", "Port:")), gc);
103
104 gc.gridx = 1;
105 gc.weightx = 0.0;
106 pnl.add(tfProxyHttpPort = new JTextField(5),gc);
107
108 gc.gridy = 2;
109 gc.gridx = 0;
110 gc.gridwidth = 2;
111 gc.fill = GridBagConstraints.BOTH;
112 gc.weightx = 1.0;
113 gc.weighty = 1.0;
114 pnl.add(new JMultilineLabel(tr("Please enter a username and a password if your proxy requires authentication.")), gc);
115
116 gc.gridy = 3;
117 gc.gridx = 0;
118 gc.gridwidth = 1;
119 gc.weightx = 0.0;
120 gc.fill = GridBagConstraints.NONE;
121 pnl.add(new JLabel(tr("User:")), gc);
122
123 gc.gridy = 3;
124 gc.gridx = 1;
125 pnl.add(tfProxyHttpUser = new JTextField(20),gc);
126
127 gc.gridy = 4;
128 gc.gridx = 0;
129 pnl.add(new JLabel(tr("Password:")), gc);
130
131 gc.gridx = 1;
132 pnl.add(tfProxyHttpPassword = new JPasswordField(20),gc);
133 return pnl;
134 }
135
136 protected JPanel buildSocksProxyConfigurationPanel() {
137 JPanel pnl = new JPanel(new GridBagLayout()) {
138 @Override
139 public Dimension getMinimumSize() {
140 return getPreferredSize();
141 }
142 };
143 GridBagConstraints gc = new GridBagConstraints();
144 gc.anchor = GridBagConstraints.WEST;
145 gc.insets = new Insets(5,5,0,0);
146 pnl.add(new JLabel(tr("Host:")), gc);
147
148 gc.gridx = 1;
149 pnl.add(tfProxySocksHost = new JTextField(20),gc);
150
151 gc.gridy = 1;
152 gc.gridx = 0;
153 pnl.add(new JLabel(trc("server", "Port:")), gc);
154
155 gc.gridx = 1;
156 pnl.add(tfProxySocksPort = new JTextField(5),gc);
157
158 // add an extra spacer, otherwise the layout is broken
159 gc.gridy = 2;
160 gc.gridx = 0;
161 gc.gridwidth = 2;
162 gc.fill = GridBagConstraints.BOTH;
163 gc.weightx = 1.0;
164 gc.weighty = 1.0;
165 pnl.add(new JPanel(), gc);
166 return pnl;
167 }
168
169 protected JPanel buildProxySettingsPanel() {
170 JPanel pnl = new JPanel(new GridBagLayout());
171 GridBagConstraints gc = new GridBagConstraints();
172
173 bgProxyPolicy = new ButtonGroup();
174 rbProxyPolicy = new HashMap<ProxyPolicy, JRadioButton>();
175 ProxyPolicyChangeListener policyChangeListener = new ProxyPolicyChangeListener();
176 for (ProxyPolicy pp: ProxyPolicy.values()) {
177 rbProxyPolicy.put(pp, new JRadioButton());
178 bgProxyPolicy.add(rbProxyPolicy.get(pp));
179 rbProxyPolicy.get(pp).addItemListener(policyChangeListener);
180 }
181 gc.gridx = 0;
182 gc.gridy = 0;
183 gc.fill = GridBagConstraints.NONE;
184 gc.anchor = GridBagConstraints.FIRST_LINE_START;
185 pnl.add(rbProxyPolicy.get(ProxyPolicy.NO_PROXY),gc);
186 gc.gridx = 1;
187 gc.fill = GridBagConstraints.HORIZONTAL;
188 gc.weightx = 1.0;
189 pnl.add(new JLabel(tr("No proxy")), gc);
190
191 gc.gridx = 0;
192 gc.gridy = 1;
193 gc.fill = GridBagConstraints.NONE;
194 gc.anchor = GridBagConstraints.FIRST_LINE_START;
195 pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_SYSTEM_SETTINGS),gc);
196 gc.gridx = 1;
197 gc.fill = GridBagConstraints.HORIZONTAL;
198 gc.weightx = 1.0;
199 gc.weighty = 0.0;
200 String msg;
201 if (DefaultProxySelector.willJvmRetrieveSystemProxies()) {
202 msg = tr("Use standard system settings");
203 } else {
204 msg = tr("Use standard system settings (disabled. Start JOSM with <tt>-Djava.net.useSystemProxies=true</tt> to enable)");
205 }
206 pnl.add(new JMultilineLabel("<html>" + msg + "</html>"), gc);
207
208 gc.gridx = 0;
209 gc.gridy = 2;
210 gc.fill = GridBagConstraints.NONE;
211 gc.anchor = GridBagConstraints.FIRST_LINE_START;
212 pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_HTTP_PROXY),gc);
213 gc.gridx = 1;
214 gc.fill = GridBagConstraints.HORIZONTAL;
215 gc.weightx = 1.0;
216 pnl.add(new JLabel(tr("Manually configure a HTTP proxy")),gc);
217
218 gc.gridx = 1;
219 gc.gridy = 3;
220 gc.fill = GridBagConstraints.HORIZONTAL;
221 gc.weightx = 1.0;
222 gc.weighty = 0.0;
223 pnl.add(buildHttpProxyConfigurationPanel(),gc);
224
225 gc.gridx = 0;
226 gc.gridy = 4;
227 gc.fill = GridBagConstraints.NONE;
228 gc.anchor = GridBagConstraints.FIRST_LINE_START;
229 pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_SOCKS_PROXY),gc);
230 gc.gridx = 1;
231 gc.fill = GridBagConstraints.HORIZONTAL;
232 gc.weightx = 1.0;
233 pnl.add(new JLabel(tr("Use a SOCKS proxy")),gc);
234
235 gc.gridx = 1;
236 gc.gridy = 5;
237 gc.fill = GridBagConstraints.BOTH;
238 gc.anchor = GridBagConstraints.WEST;
239 gc.weightx = 1.0;
240 gc.weighty = 0.0;
241 pnl.add(buildSocksProxyConfigurationPanel(),gc);
242
243 return pnl;
244 }
245
246 protected void initFromPreferences() {
247 String policy = Main.pref.get(PROXY_POLICY, null);
248 ProxyPolicy pp = ProxyPolicy.fromName(policy);
249 pp = pp == null? ProxyPolicy.NO_PROXY: pp;
250 rbProxyPolicy.get(pp).setSelected(true);
251 String value = Main.pref.get("proxy.host", null);
252 if (value != null) {
253 // legacy support
254 tfProxyHttpHost.setText(value);
255 Main.pref.put("proxy.host", null);
256 } else {
257 tfProxyHttpHost.setText(Main.pref.get(PROXY_HTTP_HOST, ""));
258 }
259 value = Main.pref.get("proxy.port", null);
260 if (value != null) {
261 // legacy support
262 tfProxyHttpPort.setText(value);
263 Main.pref.put("proxy.port", null);
264 } else {
265 tfProxyHttpPort.setText(Main.pref.get(PROXY_HTTP_PORT, ""));
266 }
267 tfProxySocksHost.setText(Main.pref.get(PROXY_SOCKS_HOST, ""));
268 tfProxySocksPort.setText(Main.pref.get(PROXY_SOCKS_PORT, ""));
269 tfProxyHttpUser.setText(Main.pref.get(PROXY_USER, ""));
270 tfProxyHttpPassword.setText(Main.pref.get(PROXY_PASS, ""));
271
272 if (pp.equals(ProxyPolicy.USE_SYSTEM_SETTINGS) && ! DefaultProxySelector.willJvmRetrieveSystemProxies()) {
273 System.err.println(tr("Warning: JOSM is configured to use proxies from the system setting, but the JVM is not configured to retrieve them. Resetting preferences to ''No proxy''"));
274 pp = ProxyPolicy.NO_PROXY;
275 rbProxyPolicy.get(pp).setSelected(true);
276 }
277 }
278
279 protected void updateEnabledState() {
280 tfProxyHttpHost.setEnabled(rbProxyPolicy.get(ProxyPolicy.USE_HTTP_PROXY).isSelected());
281 tfProxyHttpPort.setEnabled(rbProxyPolicy.get(ProxyPolicy.USE_HTTP_PROXY).isSelected());
282 tfProxyHttpUser.setEnabled(rbProxyPolicy.get(ProxyPolicy.USE_HTTP_PROXY).isSelected());
283 tfProxyHttpPassword.setEnabled(rbProxyPolicy.get(ProxyPolicy.USE_HTTP_PROXY).isSelected());
284 tfProxySocksHost.setEnabled(rbProxyPolicy.get(ProxyPolicy.USE_SOCKS_PROXY).isSelected());
285 tfProxySocksPort.setEnabled(rbProxyPolicy.get(ProxyPolicy.USE_SOCKS_PROXY).isSelected());
286
287 rbProxyPolicy.get(ProxyPolicy.USE_SYSTEM_SETTINGS).setEnabled(DefaultProxySelector.willJvmRetrieveSystemProxies());
288 }
289
290 class ProxyPolicyChangeListener implements ItemListener {
291 public void itemStateChanged(ItemEvent arg0) {
292 updateEnabledState();
293 }
294 }
295
296 public void addGui(PreferenceDialog gui) {
297 gui.connection.add(new JSeparator(SwingConstants.HORIZONTAL), GBC.eol().fill(GBC.HORIZONTAL));
298 gui.connection.add(new JLabel(tr("Proxy Settings")), GBC.eol());
299 gui.connection.add(buildProxySettingsPanel(), GBC.eol().insets(20,10,0,0));
300
301 initFromPreferences();
302 updateEnabledState();
303 }
304
305 public boolean ok() {
306 ProxyPolicy policy = null;
307 for (ProxyPolicy pp: ProxyPolicy.values()) {
308 if (rbProxyPolicy.get(pp).isSelected()) {
309 policy = pp;
310 break;
311 }
312 }
313 if (policy == null) {
314 policy = ProxyPolicy.NO_PROXY;
315 }
316 Main.pref.put(PROXY_POLICY, policy.getName());
317 Main.pref.put(PROXY_HTTP_HOST, tfProxyHttpHost.getText());
318 Main.pref.put(PROXY_HTTP_PORT, tfProxyHttpPort.getText());
319 Main.pref.put(PROXY_SOCKS_HOST, tfProxySocksHost.getText());
320 Main.pref.put(PROXY_SOCKS_PORT, tfProxySocksPort.getText());
321 Main.pref.put(PROXY_USER, tfProxyHttpUser.getText());
322 Main.pref.put(PROXY_PASS, String.valueOf(tfProxyHttpPassword.getPassword()));
323
324 // remove these legacy property keys
325 Main.pref.put("proxy.anonymous", null);
326 Main.pref.put("proxy.enable", null);
327
328 // update the proxy selector
329 ProxySelector selector = ProxySelector.getDefault();
330 if (selector instanceof DefaultProxySelector) {
331 ((DefaultProxySelector)selector).initFromPreferences();
332 }
333 return false;
334 }
335}
Note: See TracBrowser for help on using the repository browser.