Changeset 3038 in osm for applications/editors/josm


Ignore:
Timestamp:
2007-05-27T20:32:30+02:00 (17 years ago)
Author:
frsantos
Message:

New tests: Crossing roads, reused segments, untagged way, fixmes
Add timeout to mirror connections

Location:
applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator
Files:
3 added
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/OSMValidatorPlugin.java

    r2839 r3038  
    33import static org.openstreetmap.josm.tools.I18n.tr;
    44
     5import java.lang.reflect.InvocationTargetException;
    56import java.util.*;
    67import java.util.regex.Matcher;
     
    1112import org.openstreetmap.josm.Main;
    1213import org.openstreetmap.josm.actions.UploadAction;
     14import org.openstreetmap.josm.actions.UploadAction.UploadHook;
    1315import org.openstreetmap.josm.gui.MapFrame;
    1416import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
     
    4345        DuplicateSegment.class,
    4446        SingleNodeSegment.class,
     47        UntaggedNode.class,
    4548        TaggedSegment.class,
     49        UntaggedWay.class,
    4650        UnorderedWay.class,
    4751        SpellCheck.class,
    48         UntaggedNode.class,
    4952        OrphanSegment.class,
     53        ReusedSegment.class,
     54        CrossingSegments.class,
    5055    };
    5156
     
    7378                newFrame.addToggleDialog(validationDialog);
    7479            Main.main.addLayer(new ErrorLayer(tr("Validation errors")));
    75             try
     80                }
     81       
     82        // Add/Remove the upload hook
     83        try
     84        {
     85            LinkedList<UploadHook> hooks = ((UploadAction)Main.main.menu.upload).uploadHooks;
     86            Iterator<UploadHook> hooksIt = hooks.iterator();
     87            while( hooksIt.hasNext() )
    7688            {
    77                 ((UploadAction)Main.main.menu.upload).uploadHooks.add( 0, new ValidateUploadHook() );
     89                if( hooksIt.next() instanceof ValidateUploadHook )
     90                {
     91                    if( newFrame == null )
     92                        hooksIt.remove();
     93                    break;
     94                }
    7895            }
    79             catch(Throwable t)
    80             {
    81                 // JOSM has no upload hooks in older versions
    82             }
    83                 }
     96            if( newFrame != null )
     97                hooks.add( 0, new ValidateUploadHook() );
     98        }
     99        catch(Throwable t)
     100        {
     101            // JOSM has no upload hooks in older versions
     102        }       
    84103        }
    85104
     
    118137           
    119138            String simpleName = testClass.getSimpleName();
    120             test.testBeforeUpload = Main.pref.getBoolean( "tests." + simpleName + ".checkBeforeUpload");           
     139            test.testBeforeUpload = Main.pref.getBoolean( "tests." + simpleName + ".checkBeforeUpload", true);           
    121140                        enabledTests.put(simpleName, test);
    122141                }
     
    165184                                }
    166185                        }
    167                         catch(Exception e)
    168                         {
    169                                 e.printStackTrace();
    170                                 JOptionPane.showMessageDialog(null, tr("Error initializing test {0}.", test.getClass().getSimpleName()));
    171                         }
     186            catch(InvocationTargetException ite)
     187            {
     188                ite.getCause().printStackTrace();
     189                JOptionPane.showMessageDialog(null, tr("Error initializing test {0}:\n {1}", test.getClass().getSimpleName(), ite.getCause().getMessage()));
     190            }
     191            catch(Exception e)
     192            {
     193                e.printStackTrace();
     194                JOptionPane.showMessageDialog(null, tr("Error initializing test {0}:\n {1}", test.getClass().getSimpleName(), e));
     195            }
    172196                }
    173197        }
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/SpellCheck.java

    r2790 r3038  
    4646    /** Preference name for checking values */
    4747    public static final String PREF_CHECK_KEYS = "tests." + SpellCheck.class.getSimpleName() + ".checkKeys";
     48    /** Preference name for checking FIXMES */
     49    public static final String PREF_CHECK_FIXMES = "tests." + SpellCheck.class.getSimpleName() + ".checkFixmes";
    4850    /** Preference name for sources */
    4951    public static final String PREF_SOURCES = "tests." + SpellCheck.class.getSimpleName() + ".sources";
     
    5456    /** Preference name for values upload check */
    5557    public static final String PREF_CHECK_VALUES_BEFORE_UPLOAD = "tests." + SpellCheck.class.getSimpleName() + ".checkValuesBeforeUpload";
     58    /** Preference name for fixmes upload check */
     59    public static final String PREF_CHECK_FIXMES_BEFORE_UPLOAD = "tests." + SpellCheck.class.getSimpleName() + ".checkFixmesBeforeUpload";
    5660       
    5761    /** Whether to check keys */
     
    5963    /** Whether to check values */
    6064    protected boolean checkValues = false;
     65    /** Whether to check for fixmes in values */
     66    protected boolean checkFixmes = false;
    6167
    6268    /** Preferences checkbox for keys */
     
    6470    /** Preferences checkbox for values */
    6571    protected JCheckBox prefCheckValues;
     72    /** Preferences checkbox for FIXMES */
     73    protected JCheckBox prefCheckFixmes;
    6674    /** The preferences checkbox for validation of keys on upload */
    6775    protected JCheckBox prefCheckKeysBeforeUpload;
    6876    /** The preferences checkbox for validation of values on upload */
    6977    protected JCheckBox prefCheckValuesBeforeUpload;
     78    /** The preferences checkbox for validation of fixmes on upload */
     79    protected JCheckBox prefCheckFixmesBeforeUpload;
    7080    /** The add button */
    7181    protected JButton addSrcButton;
     
    7989        /** Invalid key error */
    8090        protected static int INVALID_KEY        = 1;
    81         /** Invalid value error */
    82         protected static int INVALID_VALUE      = 2;
     91    /** Invalid value error */
     92    protected static int INVALID_VALUE  = 2;
     93    /** fixme error */
     94    protected static int FIXME          = 3;
    8395       
    8496    /** List of sources for spellcheck data */
     
    89101    /** Whether this test must check the values before upload. Used by peferences */
    90102    protected boolean testValuesBeforeUpload;
     103    /** Whether this test must check form fixmes in values before upload. Used by peferences */
     104    protected boolean testFixmesBeforeUpload;
    91105   
    92106        /**
     
    95109        public SpellCheck()
    96110        {
    97                 super(tr("Properties spell checker."),
    98                           tr("This plugin checks misspelled property keys and values."));
     111                super(tr("Properties checker."),
     112                          tr("This plugin checks for errors in property keys and values."));
    99113        }
    100114
     
    124138       
    125139        StringTokenizer st = new StringTokenizer(sources, ";");
     140        StringBuilder errorSources = new StringBuilder();
    126141        while (st.hasMoreTokens())
    127142        {
    128143            String source = st.nextToken();
    129144            File sourceFile = Util.mirror(new URL(source), plugin.getPluginDir());
     145            if( sourceFile == null || !sourceFile.exists() )
     146            {
     147                errorSources.append(source).append("\n");
     148                continue;
     149            }
     150           
    130151            BufferedReader reader = new BufferedReader(new FileReader(sourceFile));
    131152
     
    154175                while( true );
    155176        }
     177
     178        if( errorSources.length() > 0 )
     179            throw new IOException( tr("Could not download spellcheck data file:\n {0}", errorSources) );
     180
    156181        }
    157182       
     
    223248                                withErrors.add(p, "IPK");
    224249                        }
    225                         if( checkValues && value != null && value.length() > 0 )
    226                         {
    227                                 List<String> values = spellCheckValueData.get(key);
    228                                 if( values != null && !values.contains(prop.getValue()) && !withErrors.contains(p, "UPV"))
    229                                 {
    230                                         errors.add( new TestError(this, Severity.OTHER, tr("Unknown property values"), p, INVALID_VALUE) );
    231                                         withErrors.add(p, "UPV");
    232                                 }
    233                         }
     250            if( checkValues && value != null && value.length() > 0 && spellCheckValueData != null)
     251            {
     252                List<String> values = spellCheckValueData.get(key);
     253                if( values != null && !values.contains(prop.getValue()) && !withErrors.contains(p, "UPV"))
     254                {
     255                    errors.add( new TestError(this, Severity.OTHER, tr("Unknown property values"), p, INVALID_VALUE) );
     256                    withErrors.add(p, "UPV");
     257                }
     258            }
     259            if( checkFixmes && value != null && value.length() > 0 )
     260            {
     261                if( value.contains("FIXME") && !withErrors.contains(p, "FIXME"))
     262                {
     263                    errors.add( new TestError(this, Severity.OTHER, tr("FIXMES"), p, FIXME) );
     264                    withErrors.add(p, "FIXME");
     265                }
     266            }
    234267                }
    235268        }
     
    312345        checkKeys = Main.pref.getBoolean(PREF_CHECK_KEYS);
    313346        if( isBeforeUpload )
    314             checkKeys = checkKeys && Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD);
     347            checkKeys = checkKeys && Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, true);
    315348
    316349        checkValues = Main.pref.getBoolean(PREF_CHECK_VALUES);
    317350        if( isBeforeUpload )
    318             checkValues = checkValues && Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD);
     351            checkValues = checkValues && Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, true);
     352
     353        checkFixmes = Main.pref.getBoolean(PREF_CHECK_FIXMES);
     354        if( isBeforeUpload )
     355            checkFixmes = checkFixmes && Main.pref.getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true);
    319356        }
    320357
     
    331368        testPanel.add( new JLabel(), GBC.eol());
    332369       
    333         boolean checkKeys = Main.pref.getBoolean(PREF_CHECK_KEYS);
     370        boolean checkKeys = Main.pref.getBoolean(PREF_CHECK_KEYS, true);
    334371        prefCheckKeys = new JCheckBox(tr("Check property keys."), checkKeys);
    335372        prefCheckKeys .setToolTipText(tr("Validate that property keys are valid checking against list of words."));
     
    337374
    338375        prefCheckKeysBeforeUpload = new JCheckBox();
    339         prefCheckKeysBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD));
     376        prefCheckKeysBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, true));
    340377        testPanel.add(prefCheckKeysBeforeUpload, GBC.eop().insets(20,0,0,0));
    341378       
     
    411448        buttonPanel.setEnabled( checkKeys );
    412449       
    413         boolean checkValues = Main.pref.getBoolean(PREF_CHECK_VALUES);
     450        boolean checkValues = Main.pref.getBoolean(PREF_CHECK_VALUES, true);
    414451        prefCheckValues = new JCheckBox(tr("Check property values."), checkValues);
    415452        prefCheckValues .setToolTipText(tr("Validate that property values are valid checking against presets."));
     
    417454
    418455        prefCheckValuesBeforeUpload = new JCheckBox();
    419         prefCheckValuesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD));
     456        prefCheckValuesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, true));
    420457        testPanel.add(prefCheckValuesBeforeUpload, GBC.eop().insets(20,0,0,0));
    421        
     458
     459        boolean checkFixmes = Main.pref.getBoolean(PREF_CHECK_FIXMES, true);
     460        prefCheckFixmes = new JCheckBox(tr("Check for FIXMES."), checkFixmes);
     461        prefCheckFixmes.setToolTipText(tr("Looks for nodes, segments or ways with FIXME in any property value."));
     462        testPanel.add(prefCheckFixmes, GBC.std().insets(40,0,0,0));
     463
     464        prefCheckFixmesBeforeUpload = new JCheckBox();
     465        prefCheckFixmesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true));
     466        testPanel.add(prefCheckFixmesBeforeUpload, GBC.eop().insets(20,0,0,0));
    422467        }
    423468
     
    432477        prefCheckValues.setEnabled(enabled);
    433478        prefCheckValuesBeforeUpload.setEnabled(enabled);
     479        prefCheckFixmes.setEnabled(enabled);
     480        prefCheckFixmesBeforeUpload.setEnabled(enabled);
    434481    }
    435482   
     
    439486        Main.pref.put(PREF_CHECK_VALUES, prefCheckValues.isSelected());
    440487        Main.pref.put(PREF_CHECK_KEYS, prefCheckKeys.isSelected());
     488        Main.pref.put(PREF_CHECK_FIXMES, prefCheckFixmes.isSelected());
    441489        Main.pref.put(PREF_CHECK_VALUES_BEFORE_UPLOAD, prefCheckValuesBeforeUpload.isSelected());
    442490        Main.pref.put(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected());
    443         Main.pref.put(PREF_CHECK_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected() || prefCheckValuesBeforeUpload.isSelected());           
     491        Main.pref.put(PREF_CHECK_FIXMES_BEFORE_UPLOAD, prefCheckFixmesBeforeUpload.isSelected());           
     492        Main.pref.put(PREF_CHECK_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected() || prefCheckValuesBeforeUpload.isSelected() || prefCheckFixmesBeforeUpload.isSelected());
    444493        String sources = "";
    445494        if( spellcheckSources.getModel().getSize() > 0 )
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/util/Util.java

    r2791 r3038  
    66import java.io.*;
    77import java.net.URL;
     8import java.net.URLConnection;
    89import java.util.StringTokenizer;
    910import java.util.regex.Matcher;
     
    172173     * @param destDir The destionation dir of the mirrored file
    173174     * @return The local file
    174      * @throws IOException If any error reading or writing the file
    175      */
    176     public static File mirror(URL url, String destDir) throws IOException
     175     */
     176    public static File mirror(URL url, String destDir)
    177177    {
    178178        if( url.getProtocol().equals("file") )
     
    199199        try
    200200        {
    201             bis = new BufferedInputStream(url.openStream());
     201            URLConnection conn = url.openConnection();
     202            conn.setConnectTimeout(5000);
     203            bis = new BufferedInputStream(conn.getInputStream());
    202204            bos = new BufferedOutputStream( new FileOutputStream(localPath) );
    203205            byte[] buffer = new byte[4096];
     
    207209                bos.write( buffer, 0, length );
    208210            }
     211        }
     212        catch(IOException ioe)
     213        {
     214            if( oldFile != null )
     215                return oldFile;
     216            else
     217                return null;
    209218        }
    210219        finally
Note: See TracChangeset for help on using the changeset viewer.