Ignore:
Timestamp:
2008-01-09T19:05:45+01:00 (17 years ago)
Author:
gabriel
Message:

Validator plugin: Highlight way segments instead of ways (where applicable).

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

Legend:

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

    r5583 r6302  
    22
    33import java.awt.*;
    4 import java.util.ArrayList;
     4import java.util.Collections;
    55import java.util.List;
    66
     
    2121        private String message;
    2222        /** The affected primitives */
    23         private List<OsmPrimitive> primitives;
     23        private List<? extends OsmPrimitive> primitives;
     24        /** The primitives to be highlighted */
     25        private List<?> highlighted;
    2426        /** The tester that raised this error */
    2527        private Test tester;
    2628        /** Internal code used by testers to classify errors */
    27         private int internalCode;
     29        private int internalCode = -1;
    2830    /** If this error is selected */
    2931    private boolean selected;
    3032       
    31         /**
    32          * Constructor
    33          */
    34         public TestError()
    35         {
     33        public TestError(Test tester, Severity severity, String message,
     34                        List<? extends OsmPrimitive> primitives, List<?> highlighted) {
     35                this.tester = tester;
     36                this.severity = severity;
     37                this.message = message;
     38                this.primitives = primitives;
     39                this.highlighted = highlighted;
    3640        }
    3741
     
    4347         * @param primitives The affected primitives
    4448         */
    45         public TestError(Test tester, Severity severity, String message, List<OsmPrimitive> primitives)
    46         {
    47                 this.tester = tester;
    48                 this.severity = severity;
    49                 this.message = message;
    50                 this.primitives = primitives;
     49        public TestError(Test tester, Severity severity, String message, List<? extends OsmPrimitive> primitives)
     50        {
     51                this(tester, severity, message, primitives, primitives);
    5152        }
    5253       
     
    6061        public TestError(Test tester, Severity severity, String message, OsmPrimitive primitive)
    6162        {
    62                 this.tester = tester;
    63                 this.severity = severity;
    64                 this.message = message;
    65                
    66                 List<OsmPrimitive> primitives = new ArrayList<OsmPrimitive>();
    67                 primitives.add(primitive);
    68                
    69                 this.primitives = primitives;
     63                this(tester, severity, message, Collections.singletonList(primitive));
    7064        }
    7165       
     
    106100         * @return the list of primitives affected by this error
    107101         */
    108         public List<OsmPrimitive> getPrimitives()
     102        public List<? extends OsmPrimitive> getPrimitives()
    109103        {
    110104                return primitives;
     
    199193    {
    200194        PaintVisitor v = new PaintVisitor(g, mv);
    201         for( OsmPrimitive p : primitives)
    202         {
    203             if( !p.deleted || !p.incomplete )
    204                 p.visit(v);
     195        for (Object o : highlighted) {
     196                        if (o instanceof OsmPrimitive) {
     197                                v.visit((OsmPrimitive) o);
     198                        } else if (o instanceof WaySegment) {
     199                                v.visit((WaySegment) o);
     200                        }
    205201        }
    206202    }   
     
    227223            this.mv = mv;
    228224        }
     225
     226                public void visit(OsmPrimitive p) {
     227            if (!p.deleted && !p.incomplete) {
     228                p.visit(this);
     229                        }
     230                }
    229231
    230232        /**
     
    278280        }
    279281
    280 
    281282       
    282283        /**
     
    308309        }
    309310
     311                public void visit(WaySegment ws) {
     312                        if (ws.lowerIndex < 0 || ws.lowerIndex >= ws.way.nodes.size()) return;
     313                        Node a = ws.way.nodes.get(ws.lowerIndex),
     314                                 b = ws.way.nodes.get(ws.lowerIndex + 1);
     315                        if (isSegmentVisible(a, b)) {
     316                                drawSegment(a, b, severity.getColor());
     317                        }
     318                }
     319
    310320                public void visit(Relation r)
    311321                {
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/CrossingWays.java

    r5583 r6302  
    8787                        if( isCoastline1 != isCoastline2 ) continue;
    8888                       
    89                     List<OsmPrimitive> primitives = new ArrayList<OsmPrimitive>();
    90                     primitives.add(es1.ws.way);
    91                     primitives.add(es2.ws.way);
    92                     errors.add( new TestError(this, Severity.WARNING, tr("Crossing ways"), primitives) );
     89                    errors.add(new TestError(this, Severity.WARNING, tr("Crossing ways"),
     90                                                Arrays.asList(es1.ws.way, es2.ws.way),
     91                                                Arrays.asList(es1.ws, es2.ws)));
    9392                    }
    9493                    segments.add(es1);
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java

    r5583 r6302  
    6868        public Command fixError(TestError testError)
    6969        {
    70         Collection<OsmPrimitive> sel = testError.getPrimitives();
     70        Collection<? extends OsmPrimitive> sel = testError.getPrimitives();
    7171        Collection<OsmPrimitive> nodes = new ArrayList<OsmPrimitive>();
    7272       
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicatedWayNodes.java

    r6301 r6302  
    1111import org.openstreetmap.josm.command.ChangeCommand;
    1212import java.util.Collections;
     13import java.util.Arrays;
    1314
    1415public class DuplicatedWayNodes extends Test {
     
    2829                        }
    2930                        if (lastN == n) {
    30                                 errors.add(new TestError(this, Severity.ERROR, tr("Duplicated way nodes"), w));
     31                                errors.add(new TestError(this, Severity.ERROR, tr("Duplicated way nodes"),
     32                                        Arrays.asList(w), Arrays.asList(n)));
    3133                                break;
    3234                        }
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/OverlappingWays.java

    r5194 r6302  
    44
    55import java.util.List;
     6import java.util.ArrayList;
    67
    78import org.openstreetmap.josm.data.coor.LatLon;
    89import org.openstreetmap.josm.data.osm.OsmPrimitive;
    910import org.openstreetmap.josm.data.osm.Way;
     11import org.openstreetmap.josm.data.osm.WaySegment;
    1012import org.openstreetmap.josm.data.osm.Node;
    1113import org.openstreetmap.josm.tools.Pair;
     
    2325{
    2426        /** Bag of all way segments */
    25         Bag<Pair<Node,Node>, OsmPrimitive> nodePairs;
     27        Bag<Pair<Node,Node>, WaySegment> nodePairs;
    2628       
    2729        /**
     
    4042        public void startTest()
    4143        {
    42                 nodePairs = new Bag<Pair<Node,Node>, OsmPrimitive>(1000);
     44                nodePairs = new Bag<Pair<Node,Node>, WaySegment>(1000);
    4345        }
    4446
     
    4648        public void endTest()
    4749        {
    48                 for (List<OsmPrimitive> duplicated : nodePairs.values())
     50                for (List<WaySegment> duplicated : nodePairs.values())
    4951                {
    5052                        if (duplicated.size() > 1)
    5153                        {
    52                                 errors.add( new TestError(this, Severity.OTHER, tr("Overlapping ways"), duplicated) );
     54                                List<OsmPrimitive> prims = new ArrayList<OsmPrimitive>();
     55                                for (WaySegment ws : duplicated) prims.add(ws.way);
     56                                errors.add(new TestError(this, Severity.OTHER,
     57                                        tr("Overlapping ways"), prims, duplicated));
    5358                        }
    5459                }
     
    6065        {
    6166                Node lastN = null;
     67                int i = -2;
    6268                for (Node n : w.nodes) {
     69                        i++;
    6370                        if (lastN == null) {
    6471                                lastN = n;
    6572                                continue;
    6673                        }
    67                         if (n.hashCode() > lastN.hashCode()) {
    68                                 nodePairs.add(new Pair<Node,Node>(lastN, n), w);
    69                         } else {
    70                                 nodePairs.add(new Pair<Node,Node>(n, lastN), w);
    71                         }
     74                        nodePairs.add(Pair.sort(new Pair<Node,Node>(lastN, n)),
     75                                new WaySegment(w, i));
    7276                        lastN = n;
    7377                }
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/SelfIntersectingWay.java

    r5283 r6302  
    44
    55import java.util.HashSet;
     6import java.util.Arrays;
    67
    78import org.openstreetmap.josm.data.osm.Way;
     
    2829                        if (nodes.contains(n)) {
    2930                                errors.add(new TestError(this,
    30                                         Severity.WARNING, tr("Self-intersecting ways"), w, 0));
     31                                        Severity.WARNING, tr("Self-intersecting ways"),
     32                                        Arrays.asList(w), Arrays.asList(n)));
    3133                                break;
    3234                        } else {
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/SpellCheck.java

    r6301 r6302  
    492492               
    493493                int i = -1;
    494                 List<OsmPrimitive> primitives = testError.getPrimitives();
     494                List<? extends OsmPrimitive> primitives = testError.getPrimitives();
    495495                for(OsmPrimitive p : primitives )
    496496                {
     
    505505                                String value = prop.getValue();
    506506                                if( value == null || value.trim().length() == 0 )
    507                                         commands.add( new ChangePropertyCommand(primitives.subList(i, i+1), key, null) );
     507                                        commands.add( new ChangePropertyCommand(Collections.singleton(primitives.get(i)), key, null) );
    508508                                else
    509509                                {
    510510                                        String replacementKey = spellCheckKeyData.get(key);
    511511                                        if( replacementKey != null )
    512                                                 commands.add( new ChangePropertyKeyCommand(primitives.subList(i, i+1), key, replacementKey) );                                 
     512                                                commands.add( new ChangePropertyKeyCommand(Collections.singleton(primitives.get(i)), key, replacementKey) );                                   
    513513                                }
    514514                        }
Note: See TracChangeset for help on using the changeset viewer.