source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java@ 10179

Last change on this file since 10179 was 10179, checked in by Don-vip, 8 years ago

sonar - squid:AssignmentInSubExpressionCheck - Assignments should not be made from within sub-expressions

  • Property svn:eol-style set to native
File size: 9.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences.plugin;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.FlowLayout;
7import java.awt.GridBagConstraints;
8import java.awt.GridBagLayout;
9import java.awt.Insets;
10import java.util.EnumMap;
11import java.util.Locale;
12import java.util.Map;
13
14import javax.swing.ButtonGroup;
15import javax.swing.JLabel;
16import javax.swing.JPanel;
17import javax.swing.JRadioButton;
18import javax.swing.event.ChangeEvent;
19import javax.swing.event.ChangeListener;
20
21import org.openstreetmap.josm.Main;
22import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
23import org.openstreetmap.josm.gui.widgets.JosmTextField;
24import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
25import org.openstreetmap.josm.plugins.PluginHandler;
26
27/**
28 * A panel for configuring whether JOSM shall update plugins at startup.
29 *
30 */
31public class PluginUpdatePolicyPanel extends JPanel {
32
33 private enum Policy {
34 ASK("ask"),
35 ALWAYS("always"),
36 NEVER("never");
37
38 private String preferenceValue;
39 Policy(String preferenceValue) {
40 this.preferenceValue = preferenceValue;
41 }
42
43 public String getPreferencesValue() {
44 return preferenceValue;
45 }
46
47 static Policy fromPreferenceValue(String preferenceValue) {
48 if (preferenceValue == null)
49 return null;
50 String prefValue = preferenceValue.trim().toLowerCase(Locale.ENGLISH);
51 for (Policy p: Policy.values()) {
52 if (p.getPreferencesValue().equals(prefValue))
53 return p;
54 }
55 return null;
56 }
57 }
58
59 private transient Map<Policy, JRadioButton> rbVersionBasedUpatePolicy;
60 private transient Map<Policy, JRadioButton> rbTimeBasedUpatePolicy;
61 private final JosmTextField tfUpdateInterval = new JosmTextField(5);
62 private final JLabel lblUpdateInterval = new JLabel(tr("Update interval (in days):"));
63
64 /**
65 * Constructs a new {@code PluginUpdatePolicyPanel}.
66 */
67 public PluginUpdatePolicyPanel() {
68 build();
69 initFromPreferences();
70 }
71
72 protected JPanel buildVersionBasedUpdatePolicyPanel() {
73 JPanel pnl = new JPanel(new GridBagLayout());
74 GridBagConstraints gc = new GridBagConstraints();
75 gc.anchor = GridBagConstraints.NORTHWEST;
76 gc.fill = GridBagConstraints.HORIZONTAL;
77 gc.weightx = 1.0;
78
79 ButtonGroup bgVersionBasedUpdatePolicy = new ButtonGroup();
80 rbVersionBasedUpatePolicy = new EnumMap<>(Policy.class);
81 JRadioButton btn = new JRadioButton(tr("Ask before updating"));
82 rbVersionBasedUpatePolicy.put(Policy.ASK, btn);
83 bgVersionBasedUpdatePolicy.add(btn);
84
85 btn = new JRadioButton(tr("Always update without asking"));
86 rbVersionBasedUpatePolicy.put(Policy.ALWAYS, btn);
87 bgVersionBasedUpdatePolicy.add(btn);
88
89 btn = new JRadioButton(tr("Never update"));
90 rbVersionBasedUpatePolicy.put(Policy.NEVER, btn);
91 bgVersionBasedUpdatePolicy.add(btn);
92
93 JMultilineLabel lbl = new JMultilineLabel(
94 tr("Please decide whether JOSM shall automatically update active plugins at startup after an update of JOSM itself."));
95 gc.gridy = 0;
96 pnl.add(lbl, gc);
97 for (Policy p: Policy.values()) {
98 gc.gridy++;
99 pnl.add(rbVersionBasedUpatePolicy.get(p), gc);
100 }
101 return pnl;
102 }
103
104 protected JPanel buildUpdateIntervalPanel() {
105 JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
106 pnl.add(lblUpdateInterval);
107 pnl.add(tfUpdateInterval);
108 lblUpdateInterval.setLabelFor(tfUpdateInterval);
109 SelectAllOnFocusGainedDecorator.decorate(tfUpdateInterval);
110 return pnl;
111 }
112
113 protected JPanel buildTimeBasedUpdatePolicyPanel() {
114 JPanel pnl = new JPanel(new GridBagLayout());
115 GridBagConstraints gc = new GridBagConstraints();
116 gc.anchor = GridBagConstraints.NORTHWEST;
117 gc.fill = GridBagConstraints.HORIZONTAL;
118 gc.weightx = 1.0;
119
120 TimeBasedPolicyChangeListener changeListener = new TimeBasedPolicyChangeListener();
121
122 ButtonGroup bgTimeBasedUpdatePolicy = new ButtonGroup();
123 rbTimeBasedUpatePolicy = new EnumMap<>(Policy.class);
124 JRadioButton btn = new JRadioButton(tr("Ask before updating"));
125 btn.addChangeListener(changeListener);
126 rbTimeBasedUpatePolicy.put(Policy.ASK, btn);
127 bgTimeBasedUpdatePolicy.add(btn);
128
129 btn = new JRadioButton(tr("Always update without asking"));
130 btn.addChangeListener(changeListener);
131 rbTimeBasedUpatePolicy.put(Policy.ALWAYS, btn);
132 bgTimeBasedUpdatePolicy.add(btn);
133
134 btn = new JRadioButton(tr("Never update"));
135 btn.addChangeListener(changeListener);
136 rbTimeBasedUpatePolicy.put(Policy.NEVER, btn);
137 bgTimeBasedUpdatePolicy.add(btn);
138
139 JMultilineLabel lbl = new JMultilineLabel(
140 tr("Please decide whether JOSM shall automatically update active plugins after a certain period of time."));
141 gc.gridy = 0;
142 pnl.add(lbl, gc);
143 for (Policy p: Policy.values()) {
144 gc.gridy++;
145 pnl.add(rbTimeBasedUpatePolicy.get(p), gc);
146 }
147 gc.gridy++;
148 pnl.add(buildUpdateIntervalPanel(), gc);
149 return pnl;
150 }
151
152 protected final void build() {
153 setLayout(new GridBagLayout());
154 GridBagConstraints gc = new GridBagConstraints();
155 gc.anchor = GridBagConstraints.NORTHWEST;
156 gc.fill = GridBagConstraints.HORIZONTAL;
157 gc.weightx = 1.0;
158 gc.insets = new Insets(5, 5, 10, 5);
159
160 add(buildVersionBasedUpdatePolicyPanel(), gc);
161 gc.gridy = 1;
162 add(buildTimeBasedUpdatePolicyPanel(), gc);
163
164 gc.gridy = 2;
165 gc.weighty = 1.0;
166 gc.fill = GridBagConstraints.BOTH;
167 add(new JPanel(), gc);
168 }
169
170 /**
171 * Loads the relevant preference values from the JOSM preferences
172 */
173 public final void initFromPreferences() {
174 String pref = Main.pref.get("pluginmanager.version-based-update.policy", "ask");
175 Policy p = Policy.fromPreferenceValue(pref);
176 if (p == null) {
177 p = Policy.ASK;
178 }
179 rbVersionBasedUpatePolicy.get(p).setSelected(true);
180
181 pref = Main.pref.get("pluginmanager.time-based-update.policy", "ask");
182 p = Policy.fromPreferenceValue(pref);
183 if (p == null) {
184 p = Policy.ASK;
185 }
186 rbTimeBasedUpatePolicy.get(p).setSelected(true);
187
188 pref = Main.pref.get("pluginmanager.warntime", null);
189 int days = 0;
190 if (pref != null) {
191 // remove legacy preference
192 Main.pref.put("pluginmanager.warntime", null);
193 pref = pref.trim();
194 try {
195 days = Integer.parseInt(pref);
196 } catch (NumberFormatException e) {
197 // ignore - load from preference pluginmanager.time-based-update.interval
198 if (Main.isTraceEnabled()) {
199 Main.trace(e.getMessage());
200 }
201 }
202 if (days <= 0) {
203 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
204 }
205 }
206 if (days == 0) {
207 days = Main.pref.getInteger("pluginmanager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL);
208 }
209 tfUpdateInterval.setText(Integer.toString(days));
210 }
211
212 /**
213 * Remebers the update policy preference settings on the JOSM preferences
214 */
215 public void rememberInPreferences() {
216
217 // remember policy for version based update
218 //
219 for (Policy p: Policy.values()) {
220 if (rbVersionBasedUpatePolicy.get(p).isSelected()) {
221 Main.pref.put("pluginmanager.version-based-update.policy", p.getPreferencesValue());
222 break;
223 }
224 }
225
226 // remember policy for time based update
227 //
228 for (Policy p: Policy.values()) {
229 if (rbTimeBasedUpatePolicy.get(p).isSelected()) {
230 Main.pref.put("pluginmanager.time-based-update.policy", p.getPreferencesValue());
231 break;
232 }
233 }
234
235 // remember update interval
236 //
237 int days = 0;
238 try {
239 days = Integer.parseInt(tfUpdateInterval.getText().trim());
240 if (days <= 0) {
241 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
242 }
243 } catch (NumberFormatException e) {
244 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
245 }
246 Main.pref.putInteger("pluginmanager.time-based-update.interval", days);
247 }
248
249 class TimeBasedPolicyChangeListener implements ChangeListener {
250 @Override
251 public void stateChanged(ChangeEvent e) {
252 lblUpdateInterval.setEnabled(!rbTimeBasedUpatePolicy.get(Policy.NEVER).isSelected());
253 tfUpdateInterval.setEnabled(!rbTimeBasedUpatePolicy.get(Policy.NEVER).isSelected());
254 }
255 }
256
257}
Note: See TracBrowser for help on using the repository browser.