Changeset 6735 in josm for trunk/src/org


Ignore:
Timestamp:
2014-01-19T17:04:24+01:00 (10 years ago)
Author:
simon04
Message:

fix #8337 - Improve validator warning if relation members do not match the match expression

File:
1 edited

Legend:

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

    r6731 r6735  
    174174                    }
    175175                    if (ri != null) {
    176                         Set<OsmPrimitive> wrongTypes = new HashSet<OsmPrimitive>();
    177176                        if (r.types != null) {
     177                            Set<OsmPrimitive> wrongTypes = new HashSet<OsmPrimitive>();
    178178                            if (!r.types.contains(TaggingPresetType.WAY)) {
    179179                                wrongTypes.addAll(r.types.contains(TaggingPresetType.CLOSEDWAY) ? ri.openways : ri.ways);
     
    185185                                wrongTypes.addAll(ri.relations);
    186186                            }
     187                            if (!wrongTypes.isEmpty()) {
     188                                String s = marktr("Member for role {0} of wrong type");
     189                                LinkedList<OsmPrimitive> highlight = new LinkedList<OsmPrimitive>(wrongTypes);
     190                                highlight.addFirst(n);
     191                                errors.add(new TestError(this, Severity.WARNING, ROLE_VERIF_PROBLEM_MSG,
     192                                        tr(s, keyname), MessageFormat.format(s, keyname), WRONG_TYPE,
     193                                        highlight, wrongTypes));
     194                            }
    187195                        }
    188196                        if (r.memberExpression != null) {
     197                            Set<OsmPrimitive> notMatching = new HashSet<OsmPrimitive>();
    189198                            for (Collection<OsmPrimitive> c : Arrays.asList(new Collection[]{ri.nodes, ri.ways, ri.relations})) {
    190199                                for (OsmPrimitive p : c) {
    191200                                    if (p.isUsable() && !r.memberExpression.match(p)) {
    192                                         wrongTypes.add(p);
     201                                        notMatching.add(p);
    193202                                    }
    194203                                }
    195204                            }
    196                         }
    197                         if (!wrongTypes.isEmpty()) {
    198                             String s = marktr("Member for role {0} of wrong type");
    199                             LinkedList<OsmPrimitive> highlight = new LinkedList<OsmPrimitive>(wrongTypes);
    200                             highlight.addFirst(n);
    201                             errors.add(new TestError(this, Severity.WARNING, ROLE_VERIF_PROBLEM_MSG,
    202                                     tr(s, keyname), MessageFormat.format(s, keyname), WRONG_TYPE,
    203                                     highlight, wrongTypes));
     205                            if (!notMatching.isEmpty()) {
     206                                String s = marktr("Member for role ''{0}'' does not match ''{1}''");
     207                                LinkedList<OsmPrimitive> highlight = new LinkedList<OsmPrimitive>(notMatching);
     208                                highlight.addFirst(n);
     209                                errors.add(new TestError(this, Severity.WARNING, ROLE_VERIF_PROBLEM_MSG,
     210                                        tr(s, keyname, r.memberExpression), MessageFormat.format(s, keyname, r.memberExpression), WRONG_TYPE,
     211                                        highlight, notMatching));
     212                            }
    204213                        }
    205214                    }
Note: See TracChangeset for help on using the changeset viewer.