Changeset 16317 in josm for trunk/src/org/openstreetmap
- Timestamp:
- 2020-04-17T07:11:26+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
r16303 r16317 11 11 import java.util.Collection; 12 12 import java.util.Collections; 13 import java.util.HashMap;14 13 import java.util.HashSet; 15 14 import java.util.LinkedList; 16 15 import java.util.List; 17 import java.util.Map;18 16 import java.util.Set; 19 17 import java.util.stream.Collectors; … … 397 395 continue; 398 396 } 399 Relation newRel = null; 400 Map<String, Integer> rolesToReAdd = null; // <role name, index> 401 int i = 0; 402 for (RelationMember rm : r.getMembers()) { 403 if (rm.isNode() && rm.getMember() == originalNode) { 404 if (newRel == null) { 405 newRel = new Relation(r); 406 rolesToReAdd = new HashMap<>(); 407 } 408 if (rolesToReAdd != null) { 409 rolesToReAdd.put(rm.getRole(), i); 410 } 411 } 412 i++; 413 } 414 if (newRel != null) { 415 if (rolesToReAdd != null) { 416 for (Map.Entry<String, Integer> role : rolesToReAdd.entrySet()) { 417 for (Node n : newNodes) { 418 newRel.addMember(role.getValue() + 1, new RelationMember(role.getKey(), n)); 419 } 420 if (ExistingBothNew.NEW == memberships) { 421 // remove old member 422 newRel.removeMember(role.getValue()); 423 } 424 } 425 } 397 Relation newRel = new Relation(r); 398 // loop backwards because we add or remove members, works also when nodes appear 399 // multiple times in the same relation 400 boolean changed = false; 401 for (int i = r.getMembersCount() - 1; i >= 0; i--) { 402 RelationMember rm = r.getMember(i); 403 if (rm.getMember() != originalNode) 404 continue; 405 for (Node n : newNodes) { 406 newRel.addMember(i + 1, new RelationMember(rm.getRole(), n)); 407 } 408 if (ExistingBothNew.NEW == memberships) { 409 // remove old member 410 newRel.removeMember(i); 411 } 412 changed = true; 413 } 414 if (changed) { 426 415 cmds.add(new ChangeCommand(r, newRel)); 427 416 }
Note:
See TracChangeset
for help on using the changeset viewer.