Changeset 15362 in josm for trunk/src


Ignore:
Timestamp:
2019-09-19T16:01:03+02:00 (6 years ago)
Author:
Don-vip
Message:

fix #18088 - see #18006 - Allow splitting a connectivity/restriction relation with multiple via-ways

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java

    r15276 r15362  
    1919import java.util.Set;
    2020import java.util.function.Consumer;
     21import java.util.stream.Collectors;
    2122
    2223import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
     
    426427        String type = Optional.ofNullable(r.get("type")).orElse("");
    427428        if ("from".equals(role) || "to".equals(role)) {
    428             OsmPrimitive via = findVia(r, type);
    429429            List<Node> nodes = new ArrayList<>();
    430             if (via != null) {
     430            for (OsmPrimitive via : findVias(r, type)) {
    431431                if (via instanceof Node) {
    432432                    nodes.add((Node) via);
     
    468468    }
    469469
    470     static OsmPrimitive findVia(Relation r, String type) {
     470    static List<OsmPrimitive> findVias(Relation r, String type) {
    471471        if (type != null) {
    472472            switch (type) {
     473            case "connectivity":
    473474            case "restriction":
    474                 return findRelationMember(r, "via").orElse(null);
     475                return findRelationMembers(r, "via");
    475476            case "destination_sign":
    476477                // Prefer intersection over sign, see #12347
    477                 return findRelationMember(r, "intersection").orElse(findRelationMember(r, "sign").orElse(null));
     478                List<OsmPrimitive> intersections = findRelationMembers(r, "intersection");
     479                return intersections.isEmpty() ? findRelationMembers(r, "sign") : intersections;
    478480            default:
    479                 return null;
    480             }
    481         }
    482         return null;
    483     }
    484 
    485     static Optional<OsmPrimitive> findRelationMember(Relation r, String role) {
     481                break;
     482            }
     483        }
     484        return Collections.emptyList();
     485    }
     486
     487    static List<OsmPrimitive> findRelationMembers(Relation r, String role) {
    486488        return r.getMembers().stream().filter(rmv -> role.equals(rmv.getRole()))
    487                 .map(RelationMember::getMember).findAny();
     489                .map(RelationMember::getMember).collect(Collectors.toList());
    488490    }
    489491
Note: See TracChangeset for help on using the changeset viewer.