Ticket #8933: external_update.patch
| File external_update.patch, 22.0 KB (added by , 7 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
1 // License: GPL. For details, see LICENSE file.2 package org.openstreetmap.josm.gui.preferences.plugin;3 4 import static org.openstreetmap.josm.tools.I18n.tr;5 6 import java.awt.FlowLayout;7 import java.awt.GridBagConstraints;8 import java.awt.GridBagLayout;9 import java.awt.Insets;10 import java.util.EnumMap;11 import java.util.Locale;12 import java.util.Map;13 import java.util.Optional;14 15 import javax.swing.ButtonGroup;16 import javax.swing.JLabel;17 import javax.swing.JPanel;18 import javax.swing.JRadioButton;19 import javax.swing.event.ChangeEvent;20 import javax.swing.event.ChangeListener;21 22 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;23 import org.openstreetmap.josm.gui.widgets.JosmTextField;24 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;25 import org.openstreetmap.josm.plugins.PluginHandler;26 import org.openstreetmap.josm.spi.preferences.Config;27 28 /**29 * A panel for configuring whether JOSM shall update plugins at startup.30 *31 */32 public class PluginUpdatePolicyPanel extends JPanel {33 34 private enum Policy {35 ASK("ask"),36 ALWAYS("always"),37 NEVER("never");38 39 private final String preferenceValue;40 41 Policy(String preferenceValue) {42 this.preferenceValue = preferenceValue;43 }44 45 public String getPreferencesValue() {46 return preferenceValue;47 }48 49 static Policy fromPreferenceValue(String preferenceValue) {50 if (preferenceValue == null)51 return null;52 String prefValue = preferenceValue.trim().toLowerCase(Locale.ENGLISH);53 for (Policy p: Policy.values()) {54 if (p.getPreferencesValue().equals(prefValue))55 return p;56 }57 return null;58 }59 }60 61 private transient Map<Policy, JRadioButton> rbVersionBasedUpatePolicy;62 private transient Map<Policy, JRadioButton> rbTimeBasedUpatePolicy;63 private final JosmTextField tfUpdateInterval = new JosmTextField(5);64 private final JLabel lblUpdateInterval = new JLabel(tr("Update interval (in days):"));65 66 /**67 * Constructs a new {@code PluginUpdatePolicyPanel}.68 */69 public PluginUpdatePolicyPanel() {70 build();71 initFromPreferences();72 }73 74 protected JPanel buildVersionBasedUpdatePolicyPanel() {75 JPanel pnl = new JPanel(new GridBagLayout());76 GridBagConstraints gc = new GridBagConstraints();77 gc.anchor = GridBagConstraints.NORTHWEST;78 gc.fill = GridBagConstraints.HORIZONTAL;79 gc.weightx = 1.0;80 81 ButtonGroup bgVersionBasedUpdatePolicy = new ButtonGroup();82 rbVersionBasedUpatePolicy = new EnumMap<>(Policy.class);83 JRadioButton btn = new JRadioButton(tr("Ask before updating"));84 rbVersionBasedUpatePolicy.put(Policy.ASK, btn);85 bgVersionBasedUpdatePolicy.add(btn);86 87 btn = new JRadioButton(tr("Always update without asking"));88 rbVersionBasedUpatePolicy.put(Policy.ALWAYS, btn);89 bgVersionBasedUpdatePolicy.add(btn);90 91 btn = new JRadioButton(tr("Never update"));92 rbVersionBasedUpatePolicy.put(Policy.NEVER, btn);93 bgVersionBasedUpdatePolicy.add(btn);94 95 JMultilineLabel lbl = new JMultilineLabel(96 tr("Please decide whether JOSM shall automatically update active plugins at startup after an update of JOSM itself."));97 gc.gridy = 0;98 pnl.add(lbl, gc);99 for (Policy p: Policy.values()) {100 gc.gridy++;101 pnl.add(rbVersionBasedUpatePolicy.get(p), gc);102 }103 return pnl;104 }105 106 protected JPanel buildUpdateIntervalPanel() {107 JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));108 pnl.add(lblUpdateInterval);109 pnl.add(tfUpdateInterval);110 lblUpdateInterval.setLabelFor(tfUpdateInterval);111 SelectAllOnFocusGainedDecorator.decorate(tfUpdateInterval);112 return pnl;113 }114 115 protected JPanel buildTimeBasedUpdatePolicyPanel() {116 JPanel pnl = new JPanel(new GridBagLayout());117 GridBagConstraints gc = new GridBagConstraints();118 gc.anchor = GridBagConstraints.NORTHWEST;119 gc.fill = GridBagConstraints.HORIZONTAL;120 gc.weightx = 1.0;121 122 TimeBasedPolicyChangeListener changeListener = new TimeBasedPolicyChangeListener();123 124 ButtonGroup bgTimeBasedUpdatePolicy = new ButtonGroup();125 rbTimeBasedUpatePolicy = new EnumMap<>(Policy.class);126 JRadioButton btn = new JRadioButton(tr("Ask before updating"));127 btn.addChangeListener(changeListener);128 rbTimeBasedUpatePolicy.put(Policy.ASK, btn);129 bgTimeBasedUpdatePolicy.add(btn);130 131 btn = new JRadioButton(tr("Always update without asking"));132 btn.addChangeListener(changeListener);133 rbTimeBasedUpatePolicy.put(Policy.ALWAYS, btn);134 bgTimeBasedUpdatePolicy.add(btn);135 136 btn = new JRadioButton(tr("Never update"));137 btn.addChangeListener(changeListener);138 rbTimeBasedUpatePolicy.put(Policy.NEVER, btn);139 bgTimeBasedUpdatePolicy.add(btn);140 141 JMultilineLabel lbl = new JMultilineLabel(142 tr("Please decide whether JOSM shall automatically update active plugins after a certain period of time."));143 gc.gridy = 0;144 pnl.add(lbl, gc);145 for (Policy p: Policy.values()) {146 gc.gridy++;147 pnl.add(rbTimeBasedUpatePolicy.get(p), gc);148 }149 gc.gridy++;150 pnl.add(buildUpdateIntervalPanel(), gc);151 return pnl;152 }153 154 protected final void build() {155 setLayout(new GridBagLayout());156 GridBagConstraints gc = new GridBagConstraints();157 gc.anchor = GridBagConstraints.NORTHWEST;158 gc.fill = GridBagConstraints.HORIZONTAL;159 gc.weightx = 1.0;160 gc.insets = new Insets(5, 5, 10, 5);161 162 add(buildVersionBasedUpdatePolicyPanel(), gc);163 gc.gridy = 1;164 add(buildTimeBasedUpdatePolicyPanel(), gc);165 166 gc.gridy = 2;167 gc.weighty = 1.0;168 gc.fill = GridBagConstraints.BOTH;169 add(new JPanel(), gc);170 }171 172 /**173 * Loads the relevant preference values from the JOSM preferences174 */175 public final void initFromPreferences() {176 rbVersionBasedUpatePolicy.get(177 Optional.ofNullable(Policy.fromPreferenceValue(178 Config.getPref().get("pluginmanager.version-based-update.policy", "ask"))).orElse(Policy.ASK))179 .setSelected(true);180 rbTimeBasedUpatePolicy.get(181 Optional.ofNullable(Policy.fromPreferenceValue(182 Config.getPref().get("pluginmanager.time-based-update.policy", "ask"))).orElse(Policy.ASK))183 .setSelected(true);184 185 int days = Config.getPref().getInt("pluginmanager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL);186 tfUpdateInterval.setText(Integer.toString(days));187 }188 189 /**190 * Remebers the update policy preference settings on the JOSM preferences191 */192 public void rememberInPreferences() {193 194 // remember policy for version based update195 //196 for (Policy p: Policy.values()) {197 if (rbVersionBasedUpatePolicy.get(p).isSelected()) {198 Config.getPref().put("pluginmanager.version-based-update.policy", p.getPreferencesValue());199 break;200 }201 }202 203 // remember policy for time based update204 //205 for (Policy p: Policy.values()) {206 if (rbTimeBasedUpatePolicy.get(p).isSelected()) {207 Config.getPref().put("pluginmanager.time-based-update.policy", p.getPreferencesValue());208 break;209 }210 }211 212 // remember update interval213 //214 int days = 0;215 try {216 days = Integer.parseInt(tfUpdateInterval.getText().trim());217 if (days <= 0) {218 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;219 }220 } catch (NumberFormatException e) {221 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;222 }223 Config.getPref().putInt("pluginmanager.time-based-update.interval", days);224 }225 226 class TimeBasedPolicyChangeListener implements ChangeListener {227 @Override228 public void stateChanged(ChangeEvent e) {229 lblUpdateInterval.setEnabled(!rbTimeBasedUpatePolicy.get(Policy.NEVER).isSelected());230 tfUpdateInterval.setEnabled(!rbTimeBasedUpatePolicy.get(Policy.NEVER).isSelected());231 }232 }233 234 } -
src/org/openstreetmap/josm/gui/preferences/UpdatePolicyPanel.java
Property changes on: src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.gui.preferences; 3 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 6 import java.awt.FlowLayout; 7 import java.awt.GridBagConstraints; 8 import java.awt.GridBagLayout; 9 import java.awt.Insets; 10 import java.util.EnumMap; 11 import java.util.Locale; 12 import java.util.Map; 13 import java.util.Optional; 14 15 import javax.swing.ButtonGroup; 16 import javax.swing.JLabel; 17 import javax.swing.JPanel; 18 import javax.swing.JRadioButton; 19 import javax.swing.event.ChangeEvent; 20 import javax.swing.event.ChangeListener; 21 22 import org.openstreetmap.josm.gui.widgets.JMultilineLabel; 23 import org.openstreetmap.josm.gui.widgets.JosmTextField; 24 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator; 25 import org.openstreetmap.josm.plugins.PluginHandler; 26 import org.openstreetmap.josm.spi.preferences.Config; 27 28 /** 29 * An abstract method to implement update panels 30 * @author Taylor Smock 31 * @since xxx 32 */ 33 public class UpdatePolicyPanel extends JPanel { 34 private enum Policy { 35 ASK("ask"), 36 ALWAYS("always"), 37 NEVER("never"); 38 39 private final String preferenceValue; 40 41 Policy(String preferenceValue) { 42 this.preferenceValue = preferenceValue; 43 } 44 45 public String getPreferencesValue() { 46 return preferenceValue; 47 } 48 49 static Policy fromPreferenceValue(String preferenceValue) { 50 if (preferenceValue == null) 51 return null; 52 String prefValue = preferenceValue.trim().toLowerCase(Locale.ENGLISH); 53 for (Policy p: Policy.values()) { 54 if (p.getPreferencesValue().equals(prefValue)) 55 return p; 56 } 57 return null; 58 } 59 } 60 61 private transient Map<Policy, JRadioButton> rbVersionBasedUpatePolicy; 62 private transient Map<Policy, JRadioButton> rbTimeBasedUpatePolicy; 63 private final JosmTextField tfUpdateInterval = new JosmTextField(5); 64 private final JLabel lblUpdateInterval = new JLabel(tr("Update interval (in days):")); 65 private final String type; 66 67 /** 68 * Constructs a new {@code UpdatePolicyPanel}. 69 * @param type The type of external file to update (plugin, validator, map paint style) 70 */ 71 public UpdatePolicyPanel(String type) { 72 this.type = type; 73 build(); 74 initFromPreferences(); 75 } 76 77 /* 78 * Prevent empty super() 79 */ 80 @SuppressWarnings("unused") 81 private UpdatePolicyPanel() { 82 this.type = null; 83 // Do nothing 84 } 85 86 protected JPanel buildVersionBasedUpdatePolicyPanel() { 87 JPanel pnl = new JPanel(new GridBagLayout()); 88 GridBagConstraints gc = new GridBagConstraints(); 89 gc.anchor = GridBagConstraints.NORTHWEST; 90 gc.fill = GridBagConstraints.HORIZONTAL; 91 gc.weightx = 1.0; 92 93 ButtonGroup bgVersionBasedUpdatePolicy = new ButtonGroup(); 94 rbVersionBasedUpatePolicy = new EnumMap<>(Policy.class); 95 JRadioButton btn = new JRadioButton(tr("Ask before updating")); 96 rbVersionBasedUpatePolicy.put(Policy.ASK, btn); 97 bgVersionBasedUpdatePolicy.add(btn); 98 99 btn = new JRadioButton(tr("Always update without asking")); 100 rbVersionBasedUpatePolicy.put(Policy.ALWAYS, btn); 101 bgVersionBasedUpdatePolicy.add(btn); 102 103 btn = new JRadioButton(tr("Never update")); 104 rbVersionBasedUpatePolicy.put(Policy.NEVER, btn); 105 bgVersionBasedUpdatePolicy.add(btn); 106 107 JMultilineLabel lbl = new JMultilineLabel( 108 tr("Please decide whether JOSM shall automatically update active " + type + "s at startup after an update of JOSM itself.")); 109 gc.gridy = 0; 110 pnl.add(lbl, gc); 111 for (Policy p: Policy.values()) { 112 gc.gridy++; 113 pnl.add(rbVersionBasedUpatePolicy.get(p), gc); 114 } 115 return pnl; 116 } 117 118 protected JPanel buildUpdateIntervalPanel() { 119 JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT)); 120 pnl.add(lblUpdateInterval); 121 pnl.add(tfUpdateInterval); 122 lblUpdateInterval.setLabelFor(tfUpdateInterval); 123 SelectAllOnFocusGainedDecorator.decorate(tfUpdateInterval); 124 return pnl; 125 } 126 127 protected JPanel buildTimeBasedUpdatePolicyPanel() { 128 JPanel pnl = new JPanel(new GridBagLayout()); 129 GridBagConstraints gc = new GridBagConstraints(); 130 gc.anchor = GridBagConstraints.NORTHWEST; 131 gc.fill = GridBagConstraints.HORIZONTAL; 132 gc.weightx = 1.0; 133 134 TimeBasedPolicyChangeListener changeListener = new TimeBasedPolicyChangeListener(); 135 136 ButtonGroup bgTimeBasedUpdatePolicy = new ButtonGroup(); 137 rbTimeBasedUpatePolicy = new EnumMap<>(Policy.class); 138 JRadioButton btn = new JRadioButton(tr("Ask before updating")); 139 btn.addChangeListener(changeListener); 140 rbTimeBasedUpatePolicy.put(Policy.ASK, btn); 141 bgTimeBasedUpdatePolicy.add(btn); 142 143 btn = new JRadioButton(tr("Always update without asking")); 144 btn.addChangeListener(changeListener); 145 rbTimeBasedUpatePolicy.put(Policy.ALWAYS, btn); 146 bgTimeBasedUpdatePolicy.add(btn); 147 148 btn = new JRadioButton(tr("Never update")); 149 btn.addChangeListener(changeListener); 150 rbTimeBasedUpatePolicy.put(Policy.NEVER, btn); 151 bgTimeBasedUpdatePolicy.add(btn); 152 153 JMultilineLabel lbl = new JMultilineLabel( 154 tr("Please decide whether JOSM shall automatically update active " + type + "s after a certain period of time.")); 155 gc.gridy = 0; 156 pnl.add(lbl, gc); 157 for (Policy p: Policy.values()) { 158 gc.gridy++; 159 pnl.add(rbTimeBasedUpatePolicy.get(p), gc); 160 } 161 gc.gridy++; 162 pnl.add(buildUpdateIntervalPanel(), gc); 163 return pnl; 164 } 165 166 protected final void build() { 167 setLayout(new GridBagLayout()); 168 GridBagConstraints gc = new GridBagConstraints(); 169 gc.anchor = GridBagConstraints.NORTHWEST; 170 gc.fill = GridBagConstraints.HORIZONTAL; 171 gc.weightx = 1.0; 172 gc.insets = new Insets(5, 5, 10, 5); 173 174 add(buildVersionBasedUpdatePolicyPanel(), gc); 175 gc.gridy = 1; 176 add(buildTimeBasedUpdatePolicyPanel(), gc); 177 178 gc.gridy = 2; 179 gc.weighty = 1.0; 180 gc.fill = GridBagConstraints.BOTH; 181 add(new JPanel(), gc); 182 } 183 184 /** 185 * Loads the relevant preference values from the JOSM preferences 186 */ 187 public final void initFromPreferences() { 188 rbVersionBasedUpatePolicy.get( 189 Optional.ofNullable(Policy.fromPreferenceValue( 190 Config.getPref().get(type + "manager.version-based-update.policy", "ask"))).orElse(Policy.ASK)) 191 .setSelected(true); 192 rbTimeBasedUpatePolicy.get( 193 Optional.ofNullable(Policy.fromPreferenceValue( 194 Config.getPref().get(type + "manager.time-based-update.policy", "ask"))).orElse(Policy.ASK)) 195 .setSelected(true); 196 197 int days = Config.getPref().getInt(type + "manager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL); 198 tfUpdateInterval.setText(Integer.toString(days)); 199 } 200 201 /** 202 * Remembers the update policy preference settings on the JOSM preferences 203 */ 204 public void rememberInPreferences() { 205 206 // remember policy for version based update 207 // 208 for (Policy p: Policy.values()) { 209 if (rbVersionBasedUpatePolicy.get(p).isSelected()) { 210 Config.getPref().put(type + "manager.version-based-update.policy", p.getPreferencesValue()); 211 break; 212 } 213 } 214 215 // remember policy for time based update 216 // 217 for (Policy p: Policy.values()) { 218 if (rbTimeBasedUpatePolicy.get(p).isSelected()) { 219 Config.getPref().put(type + "manager.time-based-update.policy", p.getPreferencesValue()); 220 break; 221 } 222 } 223 224 // remember update interval 225 // 226 int days = 0; 227 try { 228 days = Integer.parseInt(tfUpdateInterval.getText().trim()); 229 if (days <= 0) { 230 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL; 231 } 232 } catch (NumberFormatException e) { 233 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL; 234 } 235 Config.getPref().putInt(type + "manager.time-based-update.interval", days); 236 } 237 238 class TimeBasedPolicyChangeListener implements ChangeListener { 239 @Override 240 public void stateChanged(ChangeEvent e) { 241 lblUpdateInterval.setEnabled(!rbTimeBasedUpatePolicy.get(Policy.NEVER).isSelected()); 242 tfUpdateInterval.setEnabled(!rbTimeBasedUpatePolicy.get(Policy.NEVER).isSelected()); 243 } 244 } 245 } -
src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
54 54 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory; 55 55 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; 56 56 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.PreferencePanel; 57 import org.openstreetmap.josm.gui.preferences.UpdatePolicyPanel; 57 58 import org.openstreetmap.josm.gui.util.GuiHelper; 58 59 import org.openstreetmap.josm.gui.widgets.JosmTextField; 59 60 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator; … … 87 88 private PluginListPanel pnlPluginPreferences; 88 89 private PluginPreferencesModel model; 89 90 private JScrollPane spPluginPreferences; 90 private PluginUpdatePolicyPanel pnlPluginUpdatePolicy;91 private UpdatePolicyPanel pnlPluginUpdatePolicy; 91 92 92 93 /** 93 94 * is set to true if this preference pane has been selected by the user … … 251 252 252 253 private JTabbedPane buildContentPane() { 253 254 JTabbedPane pane = getTabPane(); 254 pnlPluginUpdatePolicy = new PluginUpdatePolicyPanel();255 pnlPluginUpdatePolicy = new UpdatePolicyPanel("plugin"); 255 256 pane.addTab(tr("Plugins"), buildPluginListPanel()); 256 257 pane.addTab(tr("Plugin update policy"), pnlPluginUpdatePolicy); 257 258 return pane; -
src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTagCheckerRulesPreference.java
9 9 import java.util.Collections; 10 10 import java.util.List; 11 11 12 import javax.swing.JTabbedPane; 13 12 14 import org.openstreetmap.josm.data.preferences.sources.ExtendedSourceEntry; 13 15 import org.openstreetmap.josm.data.preferences.sources.SourceEntry; 14 16 import org.openstreetmap.josm.data.preferences.sources.SourceProvider; … … 22 24 import org.openstreetmap.josm.gui.preferences.SourceEditor; 23 25 import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting; 24 26 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting; 27 import org.openstreetmap.josm.gui.preferences.UpdatePolicyPanel; 25 28 import org.openstreetmap.josm.gui.preferences.map.MapPaintPreference; 26 29 import org.openstreetmap.josm.spi.preferences.Config; 27 30 … … 42 45 } 43 46 44 47 private static final List<SourceProvider> ruleSourceProviders = new ArrayList<>(); 48 private UpdatePolicyPanel vupp; 49 private boolean validatorPreferencesActivated = false; 45 50 46 51 /** 47 52 * Registers a new additional rule source provider. … … 130 135 131 136 valPref.addSubTab(this, tr("Tag checker rules"), 132 137 sources, tr("Choose Tag checker rules to enable")); 138 vupp = new UpdatePolicyPanel("validator"); 139 JTabbedPane pane = valPref.getTabPane(); 140 pane.addTab(tr("Tag checker update policy"), vupp); 133 141 sources.deferLoading(valPref, sources); 142 validatorPreferencesActivated = true; 134 143 } 135 144 136 145 @Override … … 142 151 OsmValidator.initializeTests(Collections.singleton(tagChecker)); 143 152 } 144 153 } 145 154 if (validatorPreferencesActivated) { 155 vupp.rememberInPreferences(); 156 } 146 157 return false; 147 158 } 148 159
