Ticket #16006: SplitOnIntersectionsAction.java.patch
| File SplitOnIntersectionsAction.java.patch, 2.5 KB (added by , 8 years ago) |
|---|
-
SplitOnIntersectionsAction.java
8 8 import java.util.ArrayList; 9 9 import java.util.Collection; 10 10 import java.util.HashMap; 11 import java.util.HashSet; 11 12 import java.util.Iterator; 12 13 import java.util.List; 13 14 import java.util.Map; 15 import java.util.Set; 14 16 15 17 import javax.swing.JOptionPane; 16 18 … … 21 23 import org.openstreetmap.josm.data.UndoRedoHandler; 22 24 import org.openstreetmap.josm.data.osm.Node; 23 25 import org.openstreetmap.josm.data.osm.OsmPrimitive; 26 import org.openstreetmap.josm.data.osm.Relation; 24 27 import org.openstreetmap.josm.data.osm.Way; 25 28 import org.openstreetmap.josm.gui.Notification; 26 29 import org.openstreetmap.josm.tools.Shortcut; … … 83 86 } 84 87 } 85 88 89 boolean createOneSequence = true; 90 Set<Relation> allWayRefs = new HashSet<>(); 86 91 for (Way splitWay : splitWays.keySet()) { 92 List<Relation> wayRefs = OsmPrimitive.getFilteredList(splitWay.getReferrers(), Relation.class); 93 for (Relation rel : wayRefs) { 94 createOneSequence &= allWayRefs.add(rel); 95 } 96 } 97 if (!createOneSequence) { 98 new Notification( 99 tr("Two or more affected ways are members of the same relation. Multiple actions are created for this split.") 100 ).setIcon(JOptionPane.WARNING_MESSAGE).show(); 101 } 102 103 for (Way splitWay : splitWays.keySet()) { 87 104 List<List<Node>> wayChunks = SplitWayCommand.buildSplitChunks(splitWay, splitWays.get(splitWay)); 88 105 if (wayChunks != null) { 89 list.add(SplitWayCommand.splitWay(splitWay, wayChunks, new ArrayList<>(selectedWays))); 106 SplitWayCommand cmd = SplitWayCommand.splitWay(splitWay, wayChunks, new ArrayList<>(selectedWays)); 107 if (!createOneSequence) { 108 UndoRedoHandler.getInstance().add(cmd); 109 } 110 list.add(cmd); 90 111 } 91 112 } 92 113 93 114 if (!list.isEmpty()) { 94 UndoRedoHandler.getInstance().add(list.size() == 1 ? list.get(0) : new SequenceCommand(TITLE, list)); 115 if (createOneSequence) { 116 UndoRedoHandler.getInstance().add(list.size() == 1 ? list.get(0) : new SequenceCommand(TITLE, list)); 117 } 95 118 getLayerManager().getEditDataSet().clearSelection(); 96 119 } 97 120 }
