source: josm/trunk/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java@ 13892

Last change on this file since 13892 was 13842, checked in by Don-vip, 6 years ago

see #16319 - scale properly all icons using ButtonSpec

  • Property svn:eol-style set to native
File size: 11.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.oauth;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.GridBagConstraints;
8import java.awt.GridBagLayout;
9import java.awt.Insets;
10import java.awt.event.ItemEvent;
11import java.awt.event.ItemListener;
12
13import javax.swing.BorderFactory;
14import javax.swing.JCheckBox;
15import javax.swing.JLabel;
16import javax.swing.JOptionPane;
17
18import org.openstreetmap.josm.data.oauth.OAuthParameters;
19import org.openstreetmap.josm.gui.HelpAwareOptionPane;
20import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
21import org.openstreetmap.josm.gui.help.HelpUtil;
22import org.openstreetmap.josm.gui.widgets.JosmTextField;
23import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
24import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
25import org.openstreetmap.josm.spi.preferences.Config;
26import org.openstreetmap.josm.tools.CheckParameterUtil;
27import org.openstreetmap.josm.tools.ImageProvider;
28
29/**
30 * Panel allowing the user to setup advanced OAuth parameters:
31 * <ul>
32 * <li>Consumer key</li>
33 * <li>Consumer secret</li>
34 * <li>Request token URL</li>
35 * <li>Access token URL</li>
36 * <li>Authorize URL</li>
37 * <li>OSM login URL</li>
38 * <li>OSM logout URL</li>
39 * </ul>
40 *
41 * @see OAuthParameters
42 * @since 2746
43 */
44public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
45
46 private final JCheckBox cbUseDefaults = new JCheckBox(tr("Use default settings"));
47 private final JosmTextField tfConsumerKey = new JosmTextField();
48 private final JosmTextField tfConsumerSecret = new JosmTextField();
49 private final JosmTextField tfRequestTokenURL = new JosmTextField();
50 private final JosmTextField tfAccessTokenURL = new JosmTextField();
51 private final JosmTextField tfAuthoriseURL = new JosmTextField();
52 private final JosmTextField tfOsmLoginURL = new JosmTextField();
53 private final JosmTextField tfOsmLogoutURL = new JosmTextField();
54 private transient UseDefaultItemListener ilUseDefault;
55 private String apiUrl;
56
57 /**
58 * Constructs a new {@code AdvancedOAuthPropertiesPanel}.
59 */
60 public AdvancedOAuthPropertiesPanel() {
61 build();
62 }
63
64 protected final void build() {
65 setLayout(new GridBagLayout());
66 setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
67 GridBagConstraints gc = new GridBagConstraints();
68
69 gc.anchor = GridBagConstraints.NORTHWEST;
70 gc.fill = GridBagConstraints.HORIZONTAL;
71 gc.weightx = 1.0;
72 gc.insets = new Insets(0, 0, 3, 3);
73 gc.gridwidth = 2;
74 add(cbUseDefaults, gc);
75
76 // -- consumer key
77 gc.gridy = 1;
78 gc.weightx = 0.0;
79 gc.gridwidth = 1;
80 add(new JLabel(tr("Consumer Key:")), gc);
81
82 gc.gridx = 1;
83 gc.weightx = 1.0;
84 add(tfConsumerKey, gc);
85 SelectAllOnFocusGainedDecorator.decorate(tfConsumerKey);
86
87 // -- consumer secret
88 gc.gridy = 2;
89 gc.gridx = 0;
90 gc.weightx = 0.0;
91 add(new JLabel(tr("Consumer Secret:")), gc);
92
93 gc.gridx = 1;
94 gc.weightx = 1.0;
95 add(tfConsumerSecret, gc);
96 SelectAllOnFocusGainedDecorator.decorate(tfConsumerSecret);
97
98 // -- request token URL
99 gc.gridy = 3;
100 gc.gridx = 0;
101 gc.weightx = 0.0;
102 add(new JLabel(tr("Request Token URL:")), gc);
103
104 gc.gridx = 1;
105 gc.weightx = 1.0;
106 add(tfRequestTokenURL, gc);
107 SelectAllOnFocusGainedDecorator.decorate(tfRequestTokenURL);
108
109 // -- access token URL
110 gc.gridy = 4;
111 gc.gridx = 0;
112 gc.weightx = 0.0;
113 add(new JLabel(tr("Access Token URL:")), gc);
114
115 gc.gridx = 1;
116 gc.weightx = 1.0;
117 add(tfAccessTokenURL, gc);
118 SelectAllOnFocusGainedDecorator.decorate(tfAccessTokenURL);
119
120 // -- authorise URL
121 gc.gridy = 5;
122 gc.gridx = 0;
123 gc.weightx = 0.0;
124 add(new JLabel(tr("Authorize URL:")), gc);
125
126 gc.gridx = 1;
127 gc.weightx = 1.0;
128 add(tfAuthoriseURL, gc);
129 SelectAllOnFocusGainedDecorator.decorate(tfAuthoriseURL);
130
131 // -- OSM login URL
132 gc.gridy = 6;
133 gc.gridx = 0;
134 gc.weightx = 0.0;
135 add(new JLabel(tr("OSM login URL:")), gc);
136
137 gc.gridx = 1;
138 gc.weightx = 1.0;
139 add(tfOsmLoginURL, gc);
140 SelectAllOnFocusGainedDecorator.decorate(tfOsmLoginURL);
141
142 // -- OSM logout URL
143 gc.gridy = 7;
144 gc.gridx = 0;
145 gc.weightx = 0.0;
146 add(new JLabel(tr("OSM logout URL:")), gc);
147
148 gc.gridx = 1;
149 gc.weightx = 1.0;
150 add(tfOsmLogoutURL, gc);
151 SelectAllOnFocusGainedDecorator.decorate(tfOsmLogoutURL);
152
153 ilUseDefault = new UseDefaultItemListener();
154 cbUseDefaults.addItemListener(ilUseDefault);
155 }
156
157 protected boolean hasCustomSettings() {
158 OAuthParameters params = OAuthParameters.createDefault(apiUrl);
159 return !params.equals(getAdvancedParameters());
160 }
161
162 protected boolean confirmOverwriteCustomSettings() {
163 ButtonSpec[] buttons = new ButtonSpec[] {
164 new ButtonSpec(
165 tr("Continue"),
166 new ImageProvider("ok"),
167 tr("Click to reset the OAuth settings to default values"),
168 null /* no dedicated help topic */
169 ),
170 new ButtonSpec(
171 tr("Cancel"),
172 new ImageProvider("cancel"),
173 tr("Click to abort resetting to the OAuth default values"),
174 null /* no dedicated help topic */
175 )
176 };
177 return 0 == HelpAwareOptionPane.showOptionDialog(
178 this,
179 tr(
180 "<html>JOSM is about to reset the OAuth settings to default values.<br>"
181 + "The current custom settings are not saved.</html>"
182 ),
183 tr("Overwrite custom OAuth settings?"),
184 JOptionPane.WARNING_MESSAGE,
185 null, /* no dedicated icon */
186 buttons,
187 buttons[0],
188 HelpUtil.ht("/Dialog/OAuthAuthorisationWizard")
189 );
190 }
191
192 protected void resetToDefaultSettings() {
193 cbUseDefaults.setSelected(true);
194 OAuthParameters params = OAuthParameters.createDefault(apiUrl);
195 tfConsumerKey.setText(params.getConsumerKey());
196 tfConsumerSecret.setText(params.getConsumerSecret());
197 tfRequestTokenURL.setText(params.getRequestTokenUrl());
198 tfAccessTokenURL.setText(params.getAccessTokenUrl());
199 tfAuthoriseURL.setText(params.getAuthoriseUrl());
200 tfOsmLoginURL.setText(params.getOsmLoginUrl());
201 tfOsmLogoutURL.setText(params.getOsmLogoutUrl());
202
203 setChildComponentsEnabled(false);
204 }
205
206 protected void setChildComponentsEnabled(boolean enabled) {
207 for (Component c: getComponents()) {
208 if (c instanceof JosmTextField || c instanceof JLabel) {
209 c.setEnabled(enabled);
210 }
211 }
212 }
213
214 /**
215 * Replies the OAuth parameters currently edited in this properties panel.
216 *
217 * @return the OAuth parameters
218 */
219 public OAuthParameters getAdvancedParameters() {
220 if (cbUseDefaults.isSelected())
221 return OAuthParameters.createDefault(apiUrl);
222 return new OAuthParameters(
223 tfConsumerKey.getText(),
224 tfConsumerSecret.getText(),
225 tfRequestTokenURL.getText(),
226 tfAccessTokenURL.getText(),
227 tfAuthoriseURL.getText(),
228 tfOsmLoginURL.getText(),
229 tfOsmLogoutURL.getText());
230 }
231
232 /**
233 * Sets the advanced parameters to be displayed
234 *
235 * @param parameters the advanced parameters. Must not be null.
236 * @throws IllegalArgumentException if parameters is null.
237 */
238 public void setAdvancedParameters(OAuthParameters parameters) {
239 CheckParameterUtil.ensureParameterNotNull(parameters, "parameters");
240 if (parameters.equals(OAuthParameters.createDefault(apiUrl))) {
241 cbUseDefaults.setSelected(true);
242 setChildComponentsEnabled(false);
243 } else {
244 cbUseDefaults.setSelected(false);
245 setChildComponentsEnabled(true);
246 tfConsumerKey.setText(parameters.getConsumerKey() == null ? "" : parameters.getConsumerKey());
247 tfConsumerSecret.setText(parameters.getConsumerSecret() == null ? "" : parameters.getConsumerSecret());
248 tfRequestTokenURL.setText(parameters.getRequestTokenUrl() == null ? "" : parameters.getRequestTokenUrl());
249 tfAccessTokenURL.setText(parameters.getAccessTokenUrl() == null ? "" : parameters.getAccessTokenUrl());
250 tfAuthoriseURL.setText(parameters.getAuthoriseUrl() == null ? "" : parameters.getAuthoriseUrl());
251 tfOsmLoginURL.setText(parameters.getOsmLoginUrl() == null ? "" : parameters.getOsmLoginUrl());
252 tfOsmLogoutURL.setText(parameters.getOsmLogoutUrl() == null ? "" : parameters.getOsmLogoutUrl());
253 }
254 }
255
256 /**
257 * Initializes the panel from the values in the preferences <code>preferences</code>.
258 *
259 * @param paramApiUrl the API URL. Must not be null.
260 * @throws IllegalArgumentException if paramApiUrl is null
261 */
262 public void initialize(String paramApiUrl) {
263 CheckParameterUtil.ensureParameterNotNull(paramApiUrl, "paramApiUrl");
264 setApiUrl(paramApiUrl);
265 boolean useDefault = Config.getPref().getBoolean("oauth.settings.use-default", true);
266 ilUseDefault.setEnabled(false);
267 if (useDefault) {
268 resetToDefaultSettings();
269 } else {
270 setAdvancedParameters(OAuthParameters.createFromApiUrl(paramApiUrl));
271 }
272 ilUseDefault.setEnabled(true);
273 }
274
275 /**
276 * Remembers the current values in the preferences <code>pref</code>.
277 */
278 public void rememberPreferences() {
279 Config.getPref().putBoolean("oauth.settings.use-default", cbUseDefaults.isSelected());
280 if (cbUseDefaults.isSelected()) {
281 new OAuthParameters(null, null, null, null, null, null, null).rememberPreferences();
282 } else {
283 getAdvancedParameters().rememberPreferences();
284 }
285 }
286
287 class UseDefaultItemListener implements ItemListener {
288 private boolean enabled;
289
290 @Override
291 public void itemStateChanged(ItemEvent e) {
292 if (!enabled) return;
293 switch (e.getStateChange()) {
294 case ItemEvent.SELECTED:
295 if (hasCustomSettings() && !confirmOverwriteCustomSettings()) {
296 cbUseDefaults.setSelected(false);
297 return;
298 }
299 resetToDefaultSettings();
300 break;
301 case ItemEvent.DESELECTED:
302 setChildComponentsEnabled(true);
303 break;
304 default: // Do nothing
305 }
306 }
307
308 public void setEnabled(boolean enabled) {
309 this.enabled = enabled;
310 }
311 }
312
313 /**
314 * Sets the URL of the OSM API for which this panel is currently displaying OAuth properties.
315 *
316 * @param apiUrl the api URL
317 * @since 5422
318 */
319 public void setApiUrl(String apiUrl) {
320 this.apiUrl = apiUrl;
321 if (cbUseDefaults.isSelected()) {
322 resetToDefaultSettings();
323 }
324 }
325}
Note: See TracBrowser for help on using the repository browser.