Ticket #9836: 9836-v2.patch
File 9836-v2.patch, 11.9 KB (added by , 4 years ago) |
---|
-
src/org/openstreetmap/josm/data/validation/OsmValidator.java
117 117 DuplicatedWayNodes.class, // ID 501 .. 599 118 118 CrossingWays.Ways.class, // ID 601 .. 699 119 119 CrossingWays.Boundaries.class, // ID 601 .. 699 120 CrossingWays.Barrier.class, // ID 601 .. 699121 120 CrossingWays.SelfCrossing.class, // ID 601 .. 699 122 121 SimilarNamedWays.class, // ID 701 .. 799 123 122 Coastlines.class, // ID 901 .. 999 -
src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
32 32 */ 33 33 public abstract class CrossingWays extends Test { 34 34 35 static final String BARRIER = "barrier"; 35 36 static final String HIGHWAY = "highway"; 36 37 static final String RAILWAY = "railway"; 37 38 static final String WATERWAY = "waterway"; … … 51 52 * Type of way. Entries have to be declared in alphabetical order, see sort below. 52 53 */ 53 54 private enum WayType { 54 B UILDING, HIGHWAY, RAILWAY, RESIDENTIAL_AREA, WATERWAY, WAY;55 BARRIER, BUILDING, HIGHWAY, RAILWAY, RESIDENTIAL_AREA, WATERWAY, WAY; 55 56 56 57 static WayType of(Way w) { 58 if (w.hasKey(CrossingWays.BARRIER)) 59 return BARRIER; 57 60 if (isBuilding(w)) 58 61 return BUILDING; 59 62 else if (w.hasKey(CrossingWays.HIGHWAY)) … … 99 102 || isRailway(w) 100 103 || isCoastline(w) 101 104 || isBuilding(w) 105 || w.hasKey(BARRIER) 102 106 || isResidentialArea(w)); 103 107 } 104 108 … … 112 116 if (w1.hasKey(HIGHWAY) && w2.hasKey(HIGHWAY) && !Objects.equals(w1.get("level"), w2.get("level"))) { 113 117 return true; 114 118 } 115 if ((w1.hasKey( HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w2))116 || (w2.hasKey( HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w1)))119 if ((w1.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w2)) 120 || (w2.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w1))) 117 121 return true; 118 122 if (isSubwayOrTramOrRazed(w2)) { 119 123 return true; … … 134 138 Arrays.sort(types); 135 139 136 140 if (types[0] == types[1]) { 137 switch(types[0]) { 141 switch (types[0]) { 142 case BARRIER: 143 return new MessageHelper(tr("Crossing barriers"), 603); 144 case BUILDING: 145 return new MessageHelper(tr("Crossing buildings"), 610); 146 case HIGHWAY: 147 return new MessageHelper(tr("Crossing highways"), 620); 148 case RAILWAY: 149 return new MessageHelper(tr("Crossing railways"), 630); 150 case RESIDENTIAL_AREA: 151 return new MessageHelper(tr("Crossing residential areas"), 640); 152 case WATERWAY: 153 return new MessageHelper(tr("Crossing waterways"), 650); 154 case WAY: 155 default: 156 return new MessageHelper(tr("Crossing ways"), CROSSING_WAYS); 157 } 158 } else { 159 switch (types[0]) { 160 case BARRIER: 161 switch (types[1]) { 138 162 case BUILDING: 139 return new MessageHelper(tr("Crossing b uildings"), 610);163 return new MessageHelper(tr("Crossing barrier/building"), 661); 140 164 case HIGHWAY: 141 return new MessageHelper(tr("Crossing highways"), 620);165 return new MessageHelper(tr("Crossing barrier/highway"), 662); 142 166 case RAILWAY: 143 return new MessageHelper(tr("Crossing railways"), 630); 144 case RESIDENTIAL_AREA: 145 return new MessageHelper(tr("Crossing residential areas"), 640); 167 return new MessageHelper(tr("Crossing barrier/railway"), 663); 146 168 case WATERWAY: 147 return new MessageHelper(tr("Crossing waterways"), 650);169 return new MessageHelper(tr("Crossing barrier/waterway"), 664); 148 170 case WAY: 149 171 default: 150 return new MessageHelper(tr("Crossing ways"), CROSSING_WAYS); 151 } 152 } else { 153 switch (types[0]) { 154 case BUILDING: 155 switch (types[1]) { 156 case HIGHWAY: 157 return new MessageHelper(tr("Crossing building/highway"), 612); 158 case RAILWAY: 159 return new MessageHelper(tr("Crossing building/railway"), 613); 160 case RESIDENTIAL_AREA: 161 return new MessageHelper(tr("Crossing building/residential area"), 614); 162 case WATERWAY: 163 return new MessageHelper(tr("Crossing building/waterway"), 615); 164 case WAY: 165 default: 166 return new MessageHelper(tr("Crossing building/way"), 611); 167 } 172 return new MessageHelper(tr("Crossing barrier/way"), 665); 173 } 174 case BUILDING: 175 switch (types[1]) { 168 176 case HIGHWAY: 169 switch (types[1]) { 170 case RAILWAY: 171 return new MessageHelper(tr("Crossing highway/railway"), 622); 172 case WATERWAY: 173 return new MessageHelper(tr("Crossing highway/waterway"), 623); 174 case WAY: 175 default: 176 return new MessageHelper(tr("Crossing highway/way"), 621); 177 } 177 return new MessageHelper(tr("Crossing building/highway"), 612); 178 178 case RAILWAY: 179 switch (types[1]) { 180 case WATERWAY: 181 return new MessageHelper(tr("Crossing railway/waterway"), 632); 182 case WAY: 183 default: 184 return new MessageHelper(tr("Crossing railway/way"), 631); 185 } 179 return new MessageHelper(tr("Crossing building/railway"), 613); 186 180 case RESIDENTIAL_AREA: 187 switch (types[1]) { 188 case WAY: 189 default: 190 return new MessageHelper(tr("Crossing residential area/way"), 641); 191 } 181 return new MessageHelper(tr("Crossing building/residential area"), 614); 192 182 case WATERWAY: 183 return new MessageHelper(tr("Crossing building/waterway"), 615); 184 case WAY: 193 185 default: 194 return new MessageHelper(tr("Crossing waterway/way"), 651); 186 return new MessageHelper(tr("Crossing building/way"), 611); 187 } 188 case HIGHWAY: 189 switch (types[1]) { 190 case RAILWAY: 191 return new MessageHelper(tr("Crossing highway/railway"), 622); 192 case WATERWAY: 193 return new MessageHelper(tr("Crossing highway/waterway"), 623); 194 case WAY: 195 default: 196 return new MessageHelper(tr("Crossing highway/way"), 621); 197 } 198 case RAILWAY: 199 switch (types[1]) { 200 case WATERWAY: 201 return new MessageHelper(tr("Crossing railway/waterway"), 632); 202 case WAY: 203 default: 204 return new MessageHelper(tr("Crossing railway/way"), 631); 205 } 206 case RESIDENTIAL_AREA: 207 switch (types[1]) { 208 case WAY: 209 default: 210 return new MessageHelper(tr("Crossing residential area/way"), 641); 211 } 212 case WATERWAY: 213 default: 214 return new MessageHelper(tr("Crossing waterway/way"), 651); 195 215 } 196 216 } 197 217 } … … 231 251 } 232 252 233 253 /** 234 * Crossing barriers ways test.235 */236 public static class Barrier extends CrossingWays {237 238 protected static final int CROSSING_BARRIERS = 603;239 240 /**241 * Constructs a new crossing {@code Barrier} test.242 */243 public Barrier() {244 super(tr("Crossing barriers"), CROSSING_BARRIERS);245 }246 247 @Override248 public boolean isPrimitiveUsable(OsmPrimitive p) {249 return super.isPrimitiveUsable(p) && p.hasKey("barrier");250 }251 252 @Override253 boolean ignoreWaySegmentCombination(Way w1, Way w2) {254 return areLayerOrLevelDifferent(w1, w2);255 }256 }257 258 /**259 254 * Self crossing ways test (for all the rest) 260 255 */ 261 256 public static class SelfCrossing extends CrossingWays { … … 263 258 protected static final int CROSSING_SELF = 604; 264 259 265 260 CrossingWays.Ways normalTest = new Ways(); 266 CrossingWays.Barrier barrierTest = new Barrier();267 261 CrossingWays.Boundaries boundariesTest = new Boundaries(); 268 262 269 263 /** … … 275 269 276 270 @Override 277 271 public boolean isPrimitiveUsable(OsmPrimitive p) { 278 return super.isPrimitiveUsable(p) && !(normalTest.isPrimitiveUsable(p) || barrierTest.isPrimitiveUsable(p)272 return super.isPrimitiveUsable(p) && !(normalTest.isPrimitiveUsable(p) 279 273 || boundariesTest.isPrimitiveUsable(p)); 280 274 } 281 275 -
test/unit/org/openstreetmap/josm/data/validation/tests/CrossingWaysTest.java
16 16 import org.openstreetmap.josm.data.osm.Node; 17 17 import org.openstreetmap.josm.data.osm.Way; 18 18 import org.openstreetmap.josm.data.osm.WaySegment; 19 import org.openstreetmap.josm.data.validation.tests.CrossingWays.Barrier;20 19 import org.openstreetmap.josm.data.validation.tests.CrossingWays.Boundaries; 21 20 import org.openstreetmap.josm.data.validation.tests.CrossingWays.SelfCrossing; 22 21 import org.openstreetmap.josm.data.validation.tests.CrossingWays.Ways; … … 160 159 } 161 160 162 161 /** 163 * Unit test of {@link CrossingWays.Barrier}164 */165 @Test166 public void testBarrier() {167 Barrier test = new CrossingWays.Barrier();168 // isPrimitiveUsable169 assertFalse(test.isPrimitiveUsable(newUsableWay("amenity=restaurant")));170 assertFalse(test.isPrimitiveUsable(TestUtils.newWay("barrier=yes"))); // Unusable (0 node)171 assertTrue(test.isPrimitiveUsable(newUsableWay("barrier=yes"))); // Usable (2 nodes)172 }173 174 /**175 162 * Unit test of {@link CrossingWays.SelfCrossing} 176 163 */ 177 164 @Test