source: josm/trunk/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java@ 5927

Last change on this file since 5927 was 5927, checked in by bastiK, 11 years ago

add missing license information

File size: 2.5 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.validation.tests;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.Arrays;
7import java.util.List;
8
9import org.openstreetmap.josm.data.osm.Node;
10import org.openstreetmap.josm.data.osm.OsmPrimitive;
11import org.openstreetmap.josm.data.osm.Relation;
12import org.openstreetmap.josm.data.osm.Way;
13import org.openstreetmap.josm.data.validation.Severity;
14import org.openstreetmap.josm.data.validation.Test;
15import org.openstreetmap.josm.data.validation.TestError;
16import org.openstreetmap.josm.gui.mappaint.ElemStyles;
17
18public class WayConnectedToArea extends Test {
19
20 public WayConnectedToArea() {
21 super(tr("Way connected to Area"), tr("Checks for ways connected to areas."));
22 }
23
24 @Override
25 public void visit(Way w) {
26 if (!w.isUsable() || w.isClosed() || !w.hasKey("highway")) {
27 return;
28 }
29
30 boolean hasway = false;
31 List<OsmPrimitive> r = w.firstNode().getReferrers();
32 for (OsmPrimitive p : r) {
33 if(p != w && p.hasKey("highway")) {
34 hasway = true;
35 break;
36 }
37 }
38 if(!hasway)
39 {
40 for (OsmPrimitive p : r) {
41 testForError(w, w.firstNode(), p);
42 }
43 }
44 hasway = false;
45 r = w.lastNode().getReferrers();
46 for (OsmPrimitive p : r) {
47 if(p != w && p.hasKey("highway")) {
48 hasway = true;
49 break;
50 }
51 }
52 if(!hasway) {
53 for (OsmPrimitive p : r) {
54 testForError(w, w.lastNode(), p);
55 }
56 }
57 }
58
59 private void testForError(Way w, Node wayNode, OsmPrimitive p) {
60 if (isArea(p)) {
61 addError(w, wayNode, p);
62 } else {
63 for (OsmPrimitive r : p.getReferrers()) {
64 if (r instanceof Relation
65 && r.hasTag("type", "multipolygon")
66 && isArea(r)) {
67 addError(w, wayNode, p);
68 break;
69 }
70 }
71 }
72 }
73
74 private boolean isArea(OsmPrimitive p) {
75 return (p.hasKey("landuse") || p.hasKey("natural"))
76 && ElemStyles.hasAreaElemStyle(p, false);
77 }
78
79 private void addError(Way w, Node wayNode, OsmPrimitive p) {
80 errors.add(new TestError(this, Severity.WARNING,
81 tr("Way terminates on Area"), 2301,
82 Arrays.asList(w, p),
83 Arrays.asList(wayNode)));
84 }
85}
Note: See TracBrowser for help on using the repository browser.