Ticket #16006: SplitOnIntersectionsAction.java.patch

File SplitOnIntersectionsAction.java.patch, 2.5 KB (added by GerdP, 5 months ago)
  • SplitOnIntersectionsAction.java

     
    88import java.util.ArrayList;
    99import java.util.Collection;
    1010import java.util.HashMap;
     11import java.util.HashSet;
    1112import java.util.Iterator;
    1213import java.util.List;
    1314import java.util.Map;
     15import java.util.Set;
    1416
    1517import javax.swing.JOptionPane;
    1618
     
    2123import org.openstreetmap.josm.data.UndoRedoHandler;
    2224import org.openstreetmap.josm.data.osm.Node;
    2325import org.openstreetmap.josm.data.osm.OsmPrimitive;
     26import org.openstreetmap.josm.data.osm.Relation;
    2427import org.openstreetmap.josm.data.osm.Way;
    2528import org.openstreetmap.josm.gui.Notification;
    2629import org.openstreetmap.josm.tools.Shortcut;
     
    8386                }
    8487        }
    8588
     89        boolean createOneSequence = true;
     90        Set<Relation> allWayRefs = new HashSet<>();
    8691        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()) {
    87104            List<List<Node>> wayChunks = SplitWayCommand.buildSplitChunks(splitWay, splitWays.get(splitWay));
    88105            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);
    90111            }
    91112        }
    92113
    93114        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            }
    95118            getLayerManager().getEditDataSet().clearSelection();
    96119        }
    97120    }