Changeset 15186 in josm
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java
r15078 r15186 43 43 private static volatile Consumer<String> warningNotifier = Logging::warn; 44 44 45 private static final class RelationInformation { 46 boolean warnme; 47 boolean insert; 48 Relation relation; 49 } 50 45 51 /** 46 52 * Sets the global warning notifier. … … 320 326 boolean insert = true; 321 327 if (relationSpecialTypes.containsKey(type) && "restriction".equals(relationSpecialTypes.get(type))) { 322 Map<String, Boolean> rValue = treatAsRestriction(r, rm, c, newWays, way, changedWay); 323 warnme = rValue.containsKey("warnme") ? rValue.get("warnme") : warnme; 324 insert = rValue.containsKey("insert") ? rValue.get("insert") : insert; 328 RelationInformation rValue = treatAsRestriction(r, rm, c, newWays, way, changedWay); 329 warnme = rValue.warnme; 330 insert = rValue.insert; 331 c = rValue.relation; 325 332 } else if (!("route".equals(type)) && !("multipolygon".equals(type))) { 326 333 warnme = true; … … 410 417 } 411 418 412 private static Map<String, Boolean>treatAsRestriction(Relation r,419 private static RelationInformation treatAsRestriction(Relation r, 413 420 RelationMember rm, Relation c, Collection<Way> newWays, Way way, 414 421 Way changedWay) { 415 HashMap<String, Boolean> rMap = new HashMap<>();422 RelationInformation relationInformation = new RelationInformation(); 416 423 /* this code assumes the restriction is correct. No real error checking done */ 417 424 String role = rm.getRole(); … … 448 455 c.addMember(new RelationMember(role, res)); 449 456 c.removeMembersFor(way); 450 r Map.put("insert", false);457 relationInformation.insert = false; 451 458 } 452 459 } else { 453 r Map.put("insert", false);460 relationInformation.insert = false; 454 461 } 455 462 } else if (!"via".equals(role)) { 456 rMap.put("warnme", true); 457 } 458 return rMap; 463 relationInformation.warnme = true; 464 } 465 relationInformation.relation = c; 466 return relationInformation; 459 467 } 460 468 -
trunk/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
r14542 r15186 7 7 import java.util.Arrays; 8 8 9 import org.junit.Assert; 9 10 import org.junit.Rule; 10 11 import org.junit.Test; 12 import org.openstreetmap.josm.TestUtils; 11 13 import org.openstreetmap.josm.data.coor.EastNorth; 14 import org.openstreetmap.josm.data.coor.LatLon; 12 15 import org.openstreetmap.josm.data.osm.DataSet; 13 16 import org.openstreetmap.josm.data.osm.Node; 17 import org.openstreetmap.josm.data.osm.Relation; 18 import org.openstreetmap.josm.data.osm.RelationMember; 14 19 import org.openstreetmap.josm.data.osm.Way; 15 20 import org.openstreetmap.josm.testutils.JOSMTestRules; … … 79 84 } 80 85 } 86 87 /** 88 * Test case: when a way is split with a turn restriction relation, 89 * the relation should not be broken. 90 * see #17810 91 */ 92 @Test 93 public void testTicket17810() { 94 DataSet dataSet = new DataSet(); 95 Way from = TestUtils.newWay("highway=residential", new Node(new LatLon(0.0, 0.0)), 96 new Node(new LatLon(0.00033, 0.00033)), new Node(new LatLon(0.00066, 0.00066)), 97 new Node(new LatLon(0.001, 0.001))); 98 from.getNodes().forEach(node -> dataSet.addPrimitive(node)); 99 dataSet.addPrimitive(from); 100 Node via = from.lastNode(); 101 Way to = TestUtils.newWay("highway=residential", new Node(new LatLon(0.002, 0.001)), via); 102 to.getNodes().forEach(node -> { 103 if (!dataSet.containsNode(node)) { 104 dataSet.addPrimitive(node); 105 } 106 }); 107 dataSet.addPrimitive(to); 108 Relation restriction = TestUtils.newRelation("type=restriction restriction=no_left_turn", 109 new RelationMember("from", from), new RelationMember("to", to), 110 new RelationMember("via", via)); 111 dataSet.addPrimitive(restriction); 112 dataSet.clearSelection(); 113 dataSet.addSelected(from.getNode(2), from); 114 SplitWayAction.runOn(dataSet); 115 for (RelationMember member : restriction.getMembers()) { 116 if ("from".equals(member.getRole())) { 117 Assert.assertTrue(member.getWay().containsNode(via)); 118 } 119 } 120 } 81 121 }
Note:
See TracChangeset
for help on using the changeset viewer.