Ignore:
Timestamp:
2014-05-20T19:04:32+02:00 (10 years ago)
Author:
simon04
Message:

fix #10019 - Order of nodes in relations after unglueing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java

    r7005 r7152  
    1111import java.util.Collection;
    1212import java.util.Collections;
     13import java.util.HashMap;
    1314import java.util.HashSet;
    1415import java.util.LinkedList;
    1516import java.util.List;
     17import java.util.Map;
    1618import java.util.Set;
    1719
     
    325327    private void fixRelations(Node originalNode, List<Command> cmds, List<Node> newNodes) {
    326328        // modify all relations containing the node
    327         Relation newRel = null;
    328         HashSet<String> rolesToReAdd = null;
    329329        for (Relation r : OsmPrimitive.getFilteredList(originalNode.getReferrers(), Relation.class)) {
    330330            if (r.isDeleted()) {
    331331                continue;
    332332            }
    333             newRel = null;
    334             rolesToReAdd = null;
     333            Relation newRel = null;
     334            HashMap<String, Integer> rolesToReAdd = null; // <role name, index>
     335            int i = 0;
    335336            for (RelationMember rm : r.getMembers()) {
    336337                if (rm.isNode() && rm.getMember() == originalNode) {
    337338                    if (newRel == null) {
    338339                        newRel = new Relation(r);
    339                         rolesToReAdd = new HashSet<>();
     340                        rolesToReAdd = new HashMap<>();
    340341                    }
    341                     rolesToReAdd.add(rm.getRole());
    342                 }
     342                    rolesToReAdd.put(rm.getRole(), i);
     343                }
     344                i++;
    343345            }
    344346            if (newRel != null) {
    345347                for (Node n : newNodes) {
    346                     for (String role : rolesToReAdd) {
    347                         newRel.addMember(new RelationMember(role, n));
     348                    for (Map.Entry<String, Integer> role : rolesToReAdd.entrySet()) {
     349                        newRel.addMember(role.getValue() + 1, new RelationMember(role.getKey(), n));
    348350                    }
    349351                }
Note: See TracChangeset for help on using the changeset viewer.