Changeset 2790 in osm
- Timestamp:
- 2007-05-06T19:50:55+02:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/SpellCheck.java
r2611 r2790 3 3 import static org.openstreetmap.josm.tools.I18n.tr; 4 4 5 import java.awt.GridBagLayout; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 5 8 import java.io.*; 6 9 import java.net.URL; … … 8 11 import java.util.Map.Entry; 9 12 10 import javax.swing.JCheckBox; 11 import javax.swing.JPanel; 13 import javax.swing.*; 12 14 13 15 import org.openstreetmap.josm.Main; … … 19 21 import org.openstreetmap.josm.plugins.validator.*; 20 22 import org.openstreetmap.josm.plugins.validator.util.Bag; 23 import org.openstreetmap.josm.plugins.validator.util.Util; 21 24 import org.openstreetmap.josm.tools.GBC; 22 25 import org.openstreetmap.josm.tools.XmlObjectParser; … … 30 33 public class SpellCheck extends Test 31 34 { 32 /** The spell check key substitutions: the key should be substituted by the value */ 35 /** The default spellcheck data file */ 36 public static final String SPELLCHECK_DATA_FILE = "http://svn.openstreetmap.org/applications/utils/planet.osm/java/speller/words.cfg"; 37 38 /** The spell check key substitutions: the key should be substituted by the value */ 33 39 protected static Map<String, String> spellCheckKeyData; 34 40 … … 36 42 protected static Bag<String, String> spellCheckValueData; 37 43 38 /** Preference name for checking values */ 39 public static final String PREF_CHECK_VALUES = "tests." + SpellCheck.class.getSimpleName() + ".checkValues"; 40 41 /** Whether to check values too */ 42 protected boolean checkValues = false; 43 44 /** Preferences checkbox */ 45 protected JCheckBox prefCheckValues; 44 /** Preference name for checking values */ 45 public static final String PREF_CHECK_VALUES = "tests." + SpellCheck.class.getSimpleName() + ".checkValues"; 46 /** Preference name for checking values */ 47 public static final String PREF_CHECK_KEYS = "tests." + SpellCheck.class.getSimpleName() + ".checkKeys"; 48 /** Preference name for sources */ 49 public static final String PREF_SOURCES = "tests." + SpellCheck.class.getSimpleName() + ".sources"; 50 /** Preference name for global upload check */ 51 public static final String PREF_CHECK_BEFORE_UPLOAD = "tests." + SpellCheck.class.getSimpleName() + ".checkBeforeUpload"; 52 /** Preference name for keys upload check */ 53 public static final String PREF_CHECK_KEYS_BEFORE_UPLOAD = "tests." + SpellCheck.class.getSimpleName() + ".checkKeysBeforeUpload"; 54 /** Preference name for values upload check */ 55 public static final String PREF_CHECK_VALUES_BEFORE_UPLOAD = "tests." + SpellCheck.class.getSimpleName() + ".checkValuesBeforeUpload"; 56 57 /** Whether to check keys */ 58 protected boolean checkKeys = false; 59 /** Whether to check values */ 60 protected boolean checkValues = false; 61 62 /** Preferences checkbox for keys */ 63 protected JCheckBox prefCheckKeys; 64 /** Preferences checkbox for values */ 65 protected JCheckBox prefCheckValues; 66 /** The preferences checkbox for validation of keys on upload */ 67 protected JCheckBox prefCheckKeysBeforeUpload; 68 /** The preferences checkbox for validation of values on upload */ 69 protected JCheckBox prefCheckValuesBeforeUpload; 70 /** The add button */ 71 protected JButton addSrcButton; 72 /** The edit button */ 73 protected JButton editSrcButton; 74 /** The delete button */ 75 protected JButton deleteSrcButton; 46 76 47 77 /** Empty values error */ … … 52 82 protected static int INVALID_VALUE = 2; 53 83 84 /** List of sources for spellcheck data */ 85 protected JList spellcheckSources; 86 87 /** Whether this test must check the keys before upload. Used by peferences */ 88 protected boolean testKeysBeforeUpload; 89 /** Whether this test must check the values before upload. Used by peferences */ 90 protected boolean testValuesBeforeUpload; 91 54 92 /** 55 93 * Constructor … … 57 95 public SpellCheck() 58 96 { 59 super(tr(" Spell checker."),97 super(tr("Properties spell checker."), 60 98 tr("This plugin checks misspelled property keys and values.")); 61 99 } … … 80 118 private static void initializeSpellCheck(OSMValidatorPlugin plugin) throws FileNotFoundException, IOException 81 119 { 82 plugin.copy("/resources/spellCheck.data", "spellCheck.data");83 BufferedReader reader = new BufferedReader( new FileReader(plugin.getPluginDir() + "/spellCheck.data") );84 85 120 spellCheckKeyData = new HashMap<String, String>(); 86 String okValue = null; 87 do 88 { 89 String line = reader.readLine(); 90 if( line == null || line.length() == 0 ) 91 break; 92 93 if( line.charAt(0) == '+' ) 94 { 95 okValue = line.substring(1); 96 } 97 else if( line.charAt(0) == '-' && okValue != null ) 98 { 99 spellCheckKeyData.put(line.substring(1), okValue); 100 } 101 else 102 { 103 System.err.println("Invalid spellcheck line:" + line); 104 } 105 } 106 while( true ); 121 String sources = Main.pref.get( PREF_SOURCES ); 122 if( sources == null || sources.length() == 0) 123 sources = SPELLCHECK_DATA_FILE; 124 125 StringTokenizer st = new StringTokenizer(sources, ";"); 126 while (st.hasMoreTokens()) 127 { 128 String source = st.nextToken(); 129 File sourceFile = Util.mirror(new URL(source), plugin.getPluginDir()); 130 BufferedReader reader = new BufferedReader(new FileReader(sourceFile)); 131 132 String okValue = null; 133 do 134 { 135 String line = reader.readLine(); 136 if( line == null || line.length() == 0 ) 137 break; 138 if( line.startsWith("#") ) 139 continue; 140 141 if( line.charAt(0) == '+' ) 142 { 143 okValue = line.substring(1); 144 } 145 else if( line.charAt(0) == '-' && okValue != null ) 146 { 147 spellCheckKeyData.put(line.substring(1), okValue); 148 } 149 else 150 { 151 System.err.println("Invalid spellcheck line:" + line); 152 } 153 } 154 while( true ); 155 } 107 156 } 108 157 … … 127 176 spellCheckValueData = new Bag<String, String>(); 128 177 readPresetFromPreferences(); 129 130 // TODO: allow per user word definitions131 178 } 132 179 … … 166 213 String key = prop.getKey(); 167 214 String value = prop.getValue(); 168 if( (value==null || value.trim().length() == 0) && !withErrors.contains(p, "EV"))215 if( checkValues && (value==null || value.trim().length() == 0) && !withErrors.contains(p, "EV")) 169 216 { 170 217 errors.add( new TestError(this, Severity.WARNING, tr("Tags with empty values"), p, EMPTY_VALUES) ); 171 218 withErrors.add(p, "EV"); 172 219 } 173 if( spellCheckKeyData.containsKey(key) && !withErrors.contains(p, "IPK"))220 if( checkKeys && spellCheckKeyData.containsKey(key) && !withErrors.contains(p, "IPK")) 174 221 { 175 222 errors.add( new TestError(this, Severity.WARNING, tr("Invalid property keys"), p, INVALID_KEY) ); … … 263 310 public void startTest() 264 311 { 265 checkValues = Main.pref.getBoolean(PREF_CHECK_VALUES); 266 } 267 312 checkKeys = Main.pref.getBoolean(PREF_CHECK_KEYS); 313 if( isBeforeUpload ) 314 checkKeys = checkKeys && Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD); 315 316 checkValues = Main.pref.getBoolean(PREF_CHECK_VALUES); 317 if( isBeforeUpload ) 318 checkValues = checkValues && Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD); 319 } 320 321 @Override 322 public void visit(Collection<OsmPrimitive> selection) 323 { 324 if( checkKeys || checkValues) 325 super.visit(selection); 326 } 327 268 328 @Override 269 329 public void addGui(JPanel testPanel) 270 330 { 271 boolean checkValues = Main.pref.getBoolean(PREF_CHECK_VALUES); 272 273 String text = tr("Check also property values from presets"); 274 prefCheckValues = new JCheckBox(text, checkValues); 275 prefCheckValues.setToolTipText(text); 276 testPanel.add(prefCheckValues, GBC.eop().insets(40,0,0,0)); 277 } 278 331 testPanel.add( new JLabel(), GBC.eol()); 332 333 boolean checkKeys = Main.pref.getBoolean(PREF_CHECK_KEYS); 334 prefCheckKeys = new JCheckBox(tr("Check property keys."), checkKeys); 335 prefCheckKeys .setToolTipText(tr("Validate that property keys are valid checking against list of words.")); 336 testPanel.add(prefCheckKeys, GBC.std().insets(40,0,0,0)); 337 338 prefCheckKeysBeforeUpload = new JCheckBox(); 339 prefCheckKeysBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD)); 340 testPanel.add(prefCheckKeysBeforeUpload, GBC.eop().insets(20,0,0,0)); 341 342 spellcheckSources = new JList(new DefaultListModel()); 343 if( !Main.pref.hasKey(PREF_SOURCES)) 344 Main.pref.put(PREF_SOURCES, SPELLCHECK_DATA_FILE); 345 346 String sources = Main.pref.get( PREF_SOURCES ); 347 StringTokenizer st = new StringTokenizer(sources, ";"); 348 while (st.hasMoreTokens()) 349 ((DefaultListModel)spellcheckSources.getModel()).addElement(st.nextToken()); 350 351 addSrcButton = new JButton(tr("Add")); 352 addSrcButton.addActionListener(new ActionListener(){ 353 public void actionPerformed(ActionEvent e) { 354 String source = JOptionPane.showInputDialog(Main.parent, tr("Spellcheck source")); 355 if (source == null) 356 return; 357 ((DefaultListModel)spellcheckSources.getModel()).addElement(source); 358 } 359 }); 360 361 editSrcButton = new JButton(tr("Edit")); 362 editSrcButton.addActionListener(new ActionListener(){ 363 public void actionPerformed(ActionEvent e) { 364 if (spellcheckSources.getSelectedIndex() == -1) 365 JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to edit.")); 366 else { 367 String source = JOptionPane.showInputDialog(Main.parent, tr("Spellcheck source"), spellcheckSources.getSelectedValue()); 368 if (source == null) 369 return; 370 ((DefaultListModel)spellcheckSources.getModel()).setElementAt(source, spellcheckSources.getSelectedIndex()); 371 } 372 } 373 }); 374 375 deleteSrcButton = new JButton(tr("Delete")); 376 deleteSrcButton.addActionListener(new ActionListener(){ 377 public void actionPerformed(ActionEvent e) { 378 if (spellcheckSources.getSelectedIndex() == -1) 379 JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to delete.")); 380 else { 381 ((DefaultListModel)spellcheckSources.getModel()).remove(spellcheckSources.getSelectedIndex()); 382 } 383 } 384 }); 385 spellcheckSources.setVisibleRowCount(3); 386 387 spellcheckSources.setToolTipText(tr("The sources (url or filename) of spell check data files. See http://wiki.openstreetmap.org/index.php/User:JLS/speller for help.")); 388 addSrcButton.setToolTipText(tr("Add a new spellcheck source to the list.")); 389 editSrcButton.setToolTipText(tr("Edit the selected source.")); 390 deleteSrcButton.setToolTipText(tr("Delete the selected source from the list.")); 391 392 testPanel.add(new JLabel(tr("Spellcheck data sources")), GBC.eol().insets(40,0,0,0)); 393 testPanel.add(new JScrollPane(spellcheckSources), GBC.eol().insets(40,0,0,0)); 394 final JPanel buttonPanel = new JPanel(new GridBagLayout()); 395 testPanel.add(buttonPanel, GBC.eol().fill(GBC.HORIZONTAL)); 396 buttonPanel.add(addSrcButton, GBC.std().insets(0,5,0,0)); 397 buttonPanel.add(editSrcButton, GBC.std().insets(5,5,5,0)); 398 buttonPanel.add(deleteSrcButton, GBC.std().insets(0,5,0,0)); 399 400 prefCheckKeys.addActionListener(new ActionListener(){ 401 public void actionPerformed(ActionEvent e) { 402 boolean selected = prefCheckKeys.isSelected(); 403 spellcheckSources.setEnabled( selected ); 404 addSrcButton.setEnabled(selected); 405 editSrcButton.setEnabled(selected); 406 deleteSrcButton.setEnabled(selected); 407 } 408 }); 409 410 spellcheckSources.setEnabled( checkKeys ); 411 buttonPanel.setEnabled( checkKeys ); 412 413 boolean checkValues = Main.pref.getBoolean(PREF_CHECK_VALUES); 414 prefCheckValues = new JCheckBox(tr("Check property values."), checkValues); 415 prefCheckValues .setToolTipText(tr("Validate that property values are valid checking against presets.")); 416 testPanel.add(prefCheckValues, GBC.std().insets(40,0,0,0)); 417 418 prefCheckValuesBeforeUpload = new JCheckBox(); 419 prefCheckValuesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD)); 420 testPanel.add(prefCheckValuesBeforeUpload, GBC.eop().insets(20,0,0,0)); 421 422 } 423 424 public void setGuiEnabled(boolean enabled) 425 { 426 prefCheckKeys.setEnabled(enabled); 427 prefCheckKeysBeforeUpload.setEnabled(enabled); 428 spellcheckSources.setEnabled( enabled ); 429 addSrcButton.setEnabled(enabled); 430 editSrcButton.setEnabled(enabled); 431 deleteSrcButton.setEnabled(enabled); 432 prefCheckValues.setEnabled(enabled); 433 prefCheckValuesBeforeUpload.setEnabled(enabled); 434 } 435 279 436 @Override 280 437 public void ok() 281 438 { 282 Main.pref.put(PREF_CHECK_VALUES, prefCheckValues.isSelected()); 439 Main.pref.put(PREF_CHECK_VALUES, prefCheckValues.isSelected()); 440 Main.pref.put(PREF_CHECK_KEYS, prefCheckKeys.isSelected()); 441 Main.pref.put(PREF_CHECK_VALUES_BEFORE_UPLOAD, prefCheckValuesBeforeUpload.isSelected()); 442 Main.pref.put(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected()); 443 Main.pref.put(PREF_CHECK_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected() || prefCheckValuesBeforeUpload.isSelected()); 444 String sources = ""; 445 if( spellcheckSources.getModel().getSize() > 0 ) 446 { 447 StringBuilder sb = new StringBuilder(); 448 for (int i = 0; i < spellcheckSources.getModel().getSize(); ++i) 449 sb.append(";"+spellcheckSources.getModel().getElementAt(i)); 450 sources = sb.substring(1); 451 } 452 Main.pref.put(PREF_SOURCES, sources ); 453 283 454 } 284 455
Note:
See TracChangeset
for help on using the changeset viewer.