Ticket #9836: 9836-v2.patch

File 9836-v2.patch, 11.9 KB (added by GerdP, 3 months ago)

cleaned patch

  • src/org/openstreetmap/josm/data/validation/OsmValidator.java

     
    117117        DuplicatedWayNodes.class, // ID  501 ..  599
    118118        CrossingWays.Ways.class, // ID  601 ..  699
    119119        CrossingWays.Boundaries.class, // ID  601 ..  699
    120         CrossingWays.Barrier.class, // ID  601 ..  699
    121120        CrossingWays.SelfCrossing.class, // ID  601 ..  699
    122121        SimilarNamedWays.class, // ID  701 ..  799
    123122        Coastlines.class, // ID  901 ..  999
  • src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java

     
    3232 */
    3333public abstract class CrossingWays extends Test {
    3434
     35    static final String BARRIER = "barrier";
    3536    static final String HIGHWAY = "highway";
    3637    static final String RAILWAY = "railway";
    3738    static final String WATERWAY = "waterway";
     
    5152     * Type of way. Entries have to be declared in alphabetical order, see sort below.
    5253     */
    5354    private enum WayType {
    54         BUILDING, HIGHWAY, RAILWAY, RESIDENTIAL_AREA, WATERWAY, WAY;
     55        BARRIER, BUILDING, HIGHWAY, RAILWAY, RESIDENTIAL_AREA, WATERWAY, WAY;
    5556
    5657        static WayType of(Way w) {
     58            if (w.hasKey(CrossingWays.BARRIER))
     59                return BARRIER;
    5760            if (isBuilding(w))
    5861                return BUILDING;
    5962            else if (w.hasKey(CrossingWays.HIGHWAY))
     
    99102                    || isRailway(w)
    100103                    || isCoastline(w)
    101104                    || isBuilding(w)
     105                    || w.hasKey(BARRIER)
    102106                    || isResidentialArea(w));
    103107        }
    104108
     
    112116            if (w1.hasKey(HIGHWAY) && w2.hasKey(HIGHWAY) && !Objects.equals(w1.get("level"), w2.get("level"))) {
    113117                return true;
    114118            }
    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)))
    117121                return true;
    118122            if (isSubwayOrTramOrRazed(w2)) {
    119123                return true;
     
    134138            Arrays.sort(types);
    135139
    136140            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]) {
    138162                    case BUILDING:
    139                         return new MessageHelper(tr("Crossing buildings"), 610);
     163                        return new MessageHelper(tr("Crossing barrier/building"), 661);
    140164                    case HIGHWAY:
    141                         return new MessageHelper(tr("Crossing highways"), 620);
     165                        return new MessageHelper(tr("Crossing barrier/highway"), 662);
    142166                    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);
    146168                    case WATERWAY:
    147                         return new MessageHelper(tr("Crossing waterways"), 650);
     169                        return new MessageHelper(tr("Crossing barrier/waterway"), 664);
    148170                    case WAY:
    149171                    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]) {
    168176                    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);
    178178                    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);
    186180                    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);
    192182                    case WATERWAY:
     183                        return new MessageHelper(tr("Crossing building/waterway"), 615);
     184                    case WAY:
    193185                    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);
    195215                }
    196216            }
    197217        }
     
    231251    }
    232252
    233253    /**
    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         @Override
    248         public boolean isPrimitiveUsable(OsmPrimitive p) {
    249             return super.isPrimitiveUsable(p) && p.hasKey("barrier");
    250         }
    251 
    252         @Override
    253         boolean ignoreWaySegmentCombination(Way w1, Way w2) {
    254             return areLayerOrLevelDifferent(w1, w2);
    255         }
    256     }
    257 
    258     /**
    259254     * Self crossing ways test (for all the rest)
    260255     */
    261256    public static class SelfCrossing extends CrossingWays {
     
    263258        protected static final int CROSSING_SELF = 604;
    264259
    265260        CrossingWays.Ways normalTest = new Ways();
    266         CrossingWays.Barrier barrierTest = new Barrier();
    267261        CrossingWays.Boundaries boundariesTest = new Boundaries();
    268262
    269263        /**
     
    275269
    276270        @Override
    277271        public boolean isPrimitiveUsable(OsmPrimitive p) {
    278             return super.isPrimitiveUsable(p) && !(normalTest.isPrimitiveUsable(p) || barrierTest.isPrimitiveUsable(p)
     272            return super.isPrimitiveUsable(p) && !(normalTest.isPrimitiveUsable(p)
    279273                    || boundariesTest.isPrimitiveUsable(p));
    280274        }
    281275
  • test/unit/org/openstreetmap/josm/data/validation/tests/CrossingWaysTest.java

     
    1616import org.openstreetmap.josm.data.osm.Node;
    1717import org.openstreetmap.josm.data.osm.Way;
    1818import org.openstreetmap.josm.data.osm.WaySegment;
    19 import org.openstreetmap.josm.data.validation.tests.CrossingWays.Barrier;
    2019import org.openstreetmap.josm.data.validation.tests.CrossingWays.Boundaries;
    2120import org.openstreetmap.josm.data.validation.tests.CrossingWays.SelfCrossing;
    2221import org.openstreetmap.josm.data.validation.tests.CrossingWays.Ways;
     
    160159    }
    161160
    162161    /**
    163      * Unit test of {@link CrossingWays.Barrier}
    164      */
    165     @Test
    166     public void testBarrier() {
    167         Barrier test = new CrossingWays.Barrier();
    168         // isPrimitiveUsable
    169         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     /**
    175162     * Unit test of {@link CrossingWays.SelfCrossing}
    176163     */
    177164    @Test