Changeset 4769 in josm


Ignore:
Timestamp:
Jan 7, 2012 10:37:19 PM (17 months ago)
Author:
simon04
Message:

RelationChecker, role verification problem: select also the relation members of wronge type

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java

    r3673 r4769  
    1010import java.util.LinkedList; 
    1111 
     12import org.openstreetmap.josm.data.osm.Node; 
     13import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    1214import org.openstreetmap.josm.data.osm.Relation; 
    1315import org.openstreetmap.josm.data.osm.RelationMember; 
     16import org.openstreetmap.josm.data.osm.Way; 
    1417import org.openstreetmap.josm.data.validation.Severity; 
    1518import org.openstreetmap.josm.data.validation.Test; 
     
    6972    public class RoleInfo { 
    7073        int total = 0; 
    71         int nodes = 0; 
    72         int ways = 0; 
    73         int closedways = 0; 
    74         int openways = 0; 
    75         int relations = 0; 
     74        Collection<Node> nodes = new LinkedList<Node>(); 
     75        Collection<Way> ways = new LinkedList<Way>(); 
     76        Collection<Way> closedways = new LinkedList<Way>(); 
     77        Collection<Way> openways = new LinkedList<Way>(); 
     78        Collection<Relation> relations = new LinkedList<Relation>(); 
    7679    } 
    7780 
     
    113116                ri.total++; 
    114117                if (m.isRelation()) { 
    115                     ri.relations++; 
     118                    ri.relations.add(m.getRelation()); 
    116119                } else if(m.isWay()) { 
    117                     ri.ways++; 
     120                    ri.ways.add(m.getWay()); 
    118121                    if (m.getWay().isClosed()) { 
    119                         ri.closedways++; 
     122                        ri.closedways.add(m.getWay()); 
    120123                    } else { 
    121                         ri.openways++; 
     124                        ri.openways.add(m.getWay()); 
    122125                    } 
    123126                } 
    124127                else if (m.isNode()) { 
    125                     ri.nodes++; 
     128                    ri.nodes.add(m.getNode()); 
    126129                } 
    127130                map.put(s, ri); 
     
    157160                        } 
    158161                    } 
    159                     if (ri != null && ((!r.types.contains(PresetType.WAY) && (r.types.contains(PresetType.CLOSEDWAY) ? ri.openways > 0 : ri.ways > 0)) 
    160                             || (!r.types.contains(PresetType.NODE) && ri.nodes > 0) || (!r.types.contains(PresetType.RELATION) && ri.relations > 0))) 
    161                     { 
    162                         String s = marktr("Member for role {0} of wrong type"); 
    163                         errors.add( new TestError(this, Severity.WARNING, tr("Role verification problem"), 
    164                                 tr(s, keyname), MessageFormat.format(s, keyname), WRONG_TYPE, n) ); 
     162                    if (ri != null) { 
     163                        Collection<OsmPrimitive> wrongTypes = new LinkedList<OsmPrimitive>(); 
     164                        if (!r.types.contains(PresetType.WAY)) { 
     165                            wrongTypes.addAll(r.types.contains(PresetType.CLOSEDWAY) ? ri.openways : ri.ways); 
     166                        } 
     167                        if (!r.types.contains(PresetType.NODE)) { 
     168                            wrongTypes.addAll(ri.nodes); 
     169                        } 
     170                        if (!r.types.contains(PresetType.RELATION)) { 
     171                            wrongTypes.addAll(ri.relations); 
     172                        } 
     173                        if (!wrongTypes.isEmpty()) { 
     174                            String s = marktr("Member for role {0} of wrong type"); 
     175                            LinkedList<OsmPrimitive> highlight = new LinkedList<OsmPrimitive>(wrongTypes); 
     176                            highlight.addFirst(n); 
     177                            errors.add(new TestError(this, Severity.WARNING, tr("Role verification problem"), 
     178                                    tr(s, keyname), MessageFormat.format(s, keyname), WRONG_TYPE, 
     179                                    highlight, wrongTypes)); 
     180                        } 
    165181                    } 
    166182                } 
Note: See TracChangeset for help on using the changeset viewer.