Changeset 17722 in osm


Ignore:
Timestamp:
2009-09-20T18:00:49+02:00 (15 years ago)
Author:
guggis
Message:

fixed #3498: Add progressbar to validator validation

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

Legend:

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

    r17479 r17722  
    1414import org.openstreetmap.josm.data.osm.Way;
    1515import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
     16import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
     17import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1618import org.openstreetmap.josm.tools.GBC;
     19import static org.openstreetmap.josm.tools.I18n.tr;
    1720
    1821/**
     
    5356    /** Whether the test is run on a partial selection data */
    5457    protected boolean partialSelection;
     58   
     59    /** the progress monitor to use */
     60    protected ProgressMonitor progressMonitor;
    5561
    5662    /**
     
    8288
    8389    /**
    84      * Notification of the start of the test. The tester can initialize the
    85      * structures it may need for this test
    86      */
    87     public void startTest()
    88     {
    89         errors = new ArrayList<TestError>(30);
     90     * Start the test using a given progress monitor
     91     *
     92     * @param progressMonitor  the progress monitor
     93     */
     94    public void startTest(ProgressMonitor progressMonitor) {
     95        if (progressMonitor == null) {
     96                this.progressMonitor = NullProgressMonitor.INSTANCE;
     97        } else {
     98                this.progressMonitor = progressMonitor;
     99        }
     100        this.progressMonitor.beginTask(tr("Running test {0}", name));
     101        errors = new ArrayList<TestError>(30);
    90102    }
    91103
     
    112124     * actions and destroy the used structures
    113125     */
    114     public void endTest() {}
     126    public void endTest() {
     127        progressMonitor.finishTask();
     128        progressMonitor = null;
     129    }
    115130
    116131    /**
     
    122137    public void visit(Collection<OsmPrimitive> selection)
    123138    {
    124         for (OsmPrimitive p : selection)
    125         {
     139        progressMonitor.setTicksCount(selection.size());
     140        for (OsmPrimitive p : selection) {
    126141            if( p.isUsable() )
    127142                p.visit(this);
     143            progressMonitor.worked(1);
    128144        }
    129145    }
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidateAction.java

    r16681 r17722  
    55import java.awt.event.ActionEvent;
    66import java.awt.event.KeyEvent;
     7import java.io.IOException;
    78import java.util.ArrayList;
    89import java.util.Collection;
    910import java.util.List;
     11
     12import javax.swing.SwingUtilities;
    1013
    1114import org.openstreetmap.josm.Main;
     
    1316import org.openstreetmap.josm.data.osm.DataSet;
    1417import org.openstreetmap.josm.data.osm.OsmPrimitive;
     18import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     19import org.openstreetmap.josm.io.OsmTransferException;
    1520import org.openstreetmap.josm.plugins.validator.util.AgregatePrimitivesVisitor;
    1621import org.openstreetmap.josm.tools.Shortcut;
     22import org.xml.sax.SAXException;
    1723
    1824/**
     
    8490        }
    8591
    86         List<TestError> errors = new ArrayList<TestError>(200);
    87         for (Test test : tests) {
    88             test.setPartialSelection(lastSelection != null);
    89             test.startTest();
    90             test.visit(selection);
    91             test.endTest();
    92             errors.addAll(test.getErrors());
    93         }
    94         tests = null;
    95         if (Main.pref.getBoolean(PreferenceEditor.PREF_USE_IGNORE, true)) {
    96             for (TestError error : errors) {
    97                 List<String> s = new ArrayList<String>();
    98                 s.add(error.getIgnoreState());
    99                 s.add(error.getIgnoreGroup());
    100                 s.add(error.getIgnoreSubGroup());
    101                 for (String state : s) {
    102                     if (state != null && plugin.ignoredErrors.contains(state)) {
    103                         error.setIgnored(true);
    104                     }
    105                 }
    106             }
    107         }
    108 
    109         plugin.validationDialog.tree.setErrors(errors);
    110         plugin.validationDialog.setVisible(true);
    111         DataSet.fireSelectionChanged(Main.main.getCurrentDataSet().getSelected());
     92        ValidationTask task = new ValidationTask(tests, selection, lastSelection);
     93        Main.worker.submit(task);       
    11294    }
    11395
     
    11698        setEnabled(getEditLayer() != null);
    11799    }
     100   
     101    /**
     102     * Asynchronous task for running a collection of tests against a collection
     103     * of primitives
     104     *
     105     */
     106   
     107    class ValidationTask extends PleaseWaitRunnable {
     108        private Collection<Test> tests;
     109        private Collection<OsmPrimitive> validatedPrimitmives;
     110        private Collection<OsmPrimitive> formerValidatedPrimitives;
     111        private boolean canceled;
     112        private List<TestError> errors;
     113       
     114        /**
     115         *
     116         * @param tests  the tests to run
     117         * @param validatedPrimitives the collection of primitives to validate.
     118         * @param formerValidatedPrimitives the last collection of primitives being validates. May be null.
     119         */
     120        public ValidationTask(Collection<Test> tests, Collection<OsmPrimitive> validatedPrimitives, Collection<OsmPrimitive> formerValidatedPrimitives) {
     121                super(tr("Validating"), false /*don't ignore exceptions */);
     122                this.validatedPrimitmives  = validatedPrimitives;
     123                this.formerValidatedPrimitives = formerValidatedPrimitives;
     124                this.tests = tests;
     125        }
     126       
     127                @Override
     128                protected void cancel() {
     129                        this.canceled = true;                   
     130                }
     131
     132                @Override
     133                protected void finish() {
     134                        if (canceled) return;
     135                       
     136                        // update GUI on Swing EDT
     137                        //
     138                        Runnable r = new Runnable()  {
     139                                public void run() {
     140                                plugin.validationDialog.tree.setErrors(errors);
     141                                plugin.validationDialog.setVisible(true);
     142                                DataSet.fireSelectionChanged(Main.main.getCurrentDataSet().getSelected());
     143                                }                               
     144                        };
     145                        if (SwingUtilities.isEventDispatchThread()) {
     146                                r.run();                               
     147                        } else {
     148                                SwingUtilities.invokeLater(r);
     149                        }
     150                }
     151
     152                @Override
     153                protected void realRun() throws SAXException, IOException,
     154                                OsmTransferException {
     155                        if (tests == null || tests.isEmpty()) return;           
     156                errors = new ArrayList<TestError>(200);
     157                getProgressMonitor().setTicksCount(tests.size() * validatedPrimitmives.size());
     158                int testCounter = 0;
     159                        for (Test test : tests) {                               
     160                                if (canceled) return;
     161                                testCounter++;
     162                                getProgressMonitor().setCustomText(tr("Test {0}/{1}: Starting {2}", testCounter, tests.size(),test.name));
     163                    test.setPartialSelection(formerValidatedPrimitives != null);
     164                    test.startTest(getProgressMonitor().createSubTaskMonitor(validatedPrimitmives.size(), false));
     165                    test.visit(validatedPrimitmives);
     166                    test.endTest();
     167                    errors.addAll(test.getErrors());
     168                }
     169                        tests = null;
     170                if (Main.pref.getBoolean(PreferenceEditor.PREF_USE_IGNORE, true)) {
     171                                getProgressMonitor().subTask(tr("Updating ignored errors ..."));
     172                    for (TestError error : errors) {
     173                        if (canceled) return;
     174                        List<String> s = new ArrayList<String>();
     175                        s.add(error.getIgnoreState());
     176                        s.add(error.getIgnoreGroup());
     177                        s.add(error.getIgnoreSubGroup());
     178                        for (String state : s) {
     179                            if (state != null && plugin.ignoredErrors.contains(state)) {
     180                                error.setIgnored(true);
     181                            }
     182                        }
     183                    }
     184                }
     185                }
     186    }
    118187}
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidateUploadHook.java

    r17715 r17722  
    5858            test.setBeforeUpload(true);
    5959            test.setPartialSelection(true);
    60             test.startTest();
     60            test.startTest(null);
    6161            test.visit(selection);
    6262            test.endTest();
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/Coastlines.java

    r17479 r17722  
    88import org.openstreetmap.josm.data.osm.OsmPrimitive;
    99import org.openstreetmap.josm.data.osm.Way;
     10import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1011import org.openstreetmap.josm.plugins.validator.Severity;
    1112import org.openstreetmap.josm.plugins.validator.Test;
     
    3839
    3940    @Override
    40     public void startTest()
     41    public void startTest(ProgressMonitor monitor)
    4142    {
     43        super.startTest(monitor);
    4244        _cellWays = new HashMap<Point2D,List<Way>>(1000);
    4345        _errorWays = new Bag<Way, Way>();
     
    4749    public void endTest()
    4850    {
     51        super.endTest();
    4952        _cellWays = null;
    5053        _errorWays = null;
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/CrossingWays.java

    r17479 r17722  
    1515import org.openstreetmap.josm.data.osm.Way;
    1616import org.openstreetmap.josm.data.osm.WaySegment;
     17import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1718import org.openstreetmap.josm.plugins.validator.OSMValidatorPlugin;
    1819import org.openstreetmap.josm.plugins.validator.Severity;
     
    4950
    5051    @Override
    51     public void startTest()
    52     {
     52    public void startTest(ProgressMonitor monitor)
     53    {
     54        super.startTest(monitor);
    5355        cellSegments = new HashMap<Point2D,List<ExtendedSegment>>(1000);
    5456        errorSegments = new HashSet<WaySegment>();
     
    5961    public void endTest()
    6062    {
     63        super.endTest();
    6164        cellSegments = null;
    6265        errorSegments = null;
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java

    r17592 r17722  
    2020import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2121import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
     22import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    2223import org.openstreetmap.josm.plugins.validator.Severity;
    2324import org.openstreetmap.josm.plugins.validator.Test;
     
    5960    }
    6061
    61 
    6262    @Override
    63     public void startTest()
    64     {
     63    public void startTest(ProgressMonitor monitor) {
     64        super.startTest(monitor);
    6565        nodes = new Bag<LatLon, OsmPrimitive>(1000);
    6666    }
    6767
    68     @Override
    69     public void endTest()
    70     {
    71         for(List<OsmPrimitive> duplicated : nodes.values() )
    72         {
    73             if( duplicated.size() > 1)
    74             {
    75                 boolean sameTags=true;
    76                 Map<String, String> keys0=duplicated.get(0).getKeys();
    77                 keys0.remove("created_by");
    78                 for(int i=0;i<duplicated.size();i++) {
    79                     Map<String, String> keysI=duplicated.get(i).getKeys();
    80                     keysI.remove("created_by");
    81                     if (!keys0.equals(keysI)) sameTags=false;
     68        @Override
     69        public void endTest() {
     70                for (List<OsmPrimitive> duplicated : nodes.values()) {
     71                        if (duplicated.size() > 1) {
     72                                boolean sameTags = true;
     73                                Map<String, String> keys0 = duplicated.get(0).getKeys();
     74                                keys0.remove("created_by");
     75                                for (int i = 0; i < duplicated.size(); i++) {
     76                                        Map<String, String> keysI = duplicated.get(i).getKeys();
     77                                        keysI.remove("created_by");
     78                                        if (!keys0.equals(keysI))
     79                                                sameTags = false;
     80                                }
     81                                if (!sameTags) {
     82                                        TestError testError = new TestError(this, Severity.WARNING,
     83                                                        tr("Nodes at same position"), DUPLICATE_NODE,
     84                                                        duplicated);
     85                                        errors.add(testError);
     86                                } else {
     87                                        TestError testError = new TestError(this, Severity.ERROR,
     88                                                        tr("Duplicated nodes"), DUPLICATE_NODE, duplicated);
     89                                        errors.add(testError);
     90                                }
     91                        }
    8292                }
    83                 if (!sameTags) {
    84                     TestError testError = new TestError(this, Severity.WARNING, tr("Nodes at same position"), DUPLICATE_NODE, duplicated);
    85                     errors.add( testError );               
    86                 } else {
    87                     TestError testError = new TestError(this, Severity.ERROR, tr("Duplicated nodes"), DUPLICATE_NODE, duplicated);
    88                     errors.add( testError );
    89                 }
    90             }
    91         }
    92         nodes = null;
    93     }
     93                super.endTest();
     94                nodes = null;
     95        }
    9496
    9597    @Override
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateWay.java

    r17479 r17722  
    1717import org.openstreetmap.josm.data.osm.Way;
    1818import org.openstreetmap.josm.data.osm.OsmPrimitive;
     19import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1920import org.openstreetmap.josm.plugins.validator.Severity;
    2021import org.openstreetmap.josm.plugins.validator.Test;
     
    6263
    6364    @Override
    64     public void startTest()
     65    public void startTest(ProgressMonitor monitor)
    6566    {
     67        super.startTest(monitor);
    6668        ways = new Bag<WayPair, OsmPrimitive>(1000);
    6769    }
     
    7072    public void endTest()
    7173    {
     74        super.endTest();
    7275        for(List<OsmPrimitive> duplicated : ways.values() )
    7376        {
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/NodesWithSameName.java

    r17479 r17722  
    88import java.util.ArrayList;
    99
     10
    1011import org.openstreetmap.josm.data.osm.Node;
     12import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1113import org.openstreetmap.josm.plugins.validator.Severity;
    1214import org.openstreetmap.josm.plugins.validator.Test;
     
    2325    }
    2426
    25     @Override public void startTest() {
     27    @Override public void startTest(ProgressMonitor monitor) {
     28        super.startTest(monitor);
    2629        namesToNodes = new HashMap<String, List<Node>>();
    2730    }
     
    4851            }
    4952        }
    50 
     53        super.endTest();
    5154        namesToNodes = null;
    5255    }
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/OverlappingWays.java

    r17351 r17722  
    1313import org.openstreetmap.josm.data.osm.Way;
    1414import org.openstreetmap.josm.data.osm.WaySegment;
     15import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1516import org.openstreetmap.josm.plugins.validator.Severity;
    1617import org.openstreetmap.josm.plugins.validator.Test;
     
    4849
    4950    @Override
    50     public void startTest()
     51    public void startTest(ProgressMonitor monitor)
    5152    {
     53        super.startTest(monitor);
    5254        nodePairs = new Bag<Pair<Node,Node>, WaySegment>(1000);
    5355    }
     
    149151            }
    150152        }
     153        super.endTest();
    151154        nodePairs = null;
    152155    }
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/SimilarNamedWays.java

    r17479 r17722  
    66import java.util.*;
    77
     8
    89import org.openstreetmap.josm.data.osm.OsmPrimitive;
    910import org.openstreetmap.josm.data.osm.Way;
     11import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1012import org.openstreetmap.josm.plugins.validator.Severity;
    1113import org.openstreetmap.josm.plugins.validator.Test;
     
    3941
    4042    @Override
    41     public void startTest()
     43    public void startTest(ProgressMonitor monitor)
    4244    {
     45        super.startTest(monitor);
    4346        cellWays = new HashMap<Point2D,List<Way>>(1000);
    4447        errorWays = new Bag<Way, Way>();
     
    5053        cellWays = null;
    5154        errorWays = null;
     55        super.endTest();
    5256    }
    5357
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java

    r17351 r17722  
    4545import org.openstreetmap.josm.data.osm.Way;
    4646import org.openstreetmap.josm.gui.preferences.TaggingPresetPreference;
     47import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    4748import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    4849import org.openstreetmap.josm.io.MirroredInputStream;
     
    553554
    554555    @Override
    555     public void startTest()
    556     {
     556    public void startTest(ProgressMonitor monitor)
     557    {
     558        super.startTest(monitor);
    557559        checkKeys = Main.pref.getBoolean(PREF_CHECK_KEYS, true);
    558560        if( isBeforeUpload )
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnclosedWays.java

    r17479 r17722  
    1212import org.openstreetmap.josm.data.osm.OsmUtils;
    1313import org.openstreetmap.josm.data.osm.Way;
     14import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1415import org.openstreetmap.josm.plugins.validator.Severity;
    1516import org.openstreetmap.josm.plugins.validator.Test;
     
    3435
    3536    @Override
    36     public void startTest() {
     37    public void startTest(ProgressMonitor monitor) {
     38        super.startTest(monitor);
    3739        _errorWays = new Bag<Way, Way>();
    3840    }
     
    4143    public void endTest() {
    4244        _errorWays = null;
     45        super.endTest();
    4346    }
    4447
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnconnectedWays.java

    r17479 r17722  
    1515import org.openstreetmap.josm.data.osm.OsmUtils;
    1616import org.openstreetmap.josm.data.osm.Way;
     17import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1718import org.openstreetmap.josm.plugins.validator.PreferenceEditor;
    1819import org.openstreetmap.josm.plugins.validator.Severity;
     
    4849
    4950    @Override
    50     public void startTest()
    51     {
     51    public void startTest(ProgressMonitor monitor)
     52    {
     53        super.startTest(monitor);
    5254        ways = new HashSet<MyWaySegment>();
    5355        endnodes = new HashSet<Node>();
     
    153155        ways = null;
    154156        endnodes = null;
     157        super.endTest();
    155158    }
    156159
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedNode.java

    r17479 r17722  
    1313import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1414import org.openstreetmap.josm.data.osm.Way;
     15import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1516import org.openstreetmap.josm.plugins.validator.Severity;
    1617import org.openstreetmap.josm.plugins.validator.Test;
     
    3940
    4041    @Override
    41     public void startTest()
     42    public void startTest(ProgressMonitor monitor)
    4243    {
     44        super.startTest(monitor);
    4345        emptyNodes = new HashSet<Node>(100);
    4446    }
     
    9193        }
    9294        emptyNodes = null;
     95        super.endTest();
    9396    }
    9497
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UntaggedWay.java

    r17540 r17722  
    1414import org.openstreetmap.josm.data.osm.RelationMember;
    1515import org.openstreetmap.josm.data.osm.Way;
     16import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1617import org.openstreetmap.josm.plugins.validator.Severity;
    1718import org.openstreetmap.josm.plugins.validator.Test;
     
    112113
    113114    @Override
    114     public void startTest()
     115    public void startTest(ProgressMonitor monitor)
    115116    {
     117        super.startTest(monitor);
    116118        multipolygonways = new LinkedList<Way>();
    117119        for (final Relation r : Main.main.getCurrentDataSet().relations)
     
    133135    {
    134136        multipolygonways = null;
     137        super.endTest();
    135138    }
    136139
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/WronglyOrderedWays.java

    r17479 r17722  
    88import org.openstreetmap.josm.data.osm.OsmPrimitive;
    99import org.openstreetmap.josm.data.osm.Way;
     10import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    1011import org.openstreetmap.josm.plugins.validator.Severity;
    1112import org.openstreetmap.josm.plugins.validator.Test;
     
    3637
    3738    @Override
    38     public void startTest()
     39    public void startTest(ProgressMonitor monitor)
    3940    {
     41        super.startTest(monitor);
    4042        _errorWays = new Bag<Way, Way>();
    4143    }
     
    4547    {
    4648        _errorWays = null;
     49        super.endTest();
    4750    }
    4851
Note: See TracChangeset for help on using the changeset viewer.