From 6ddc12ce9d88a6bf71b4c82f0a94679f21db92d9 Mon Sep 17 00:00:00 2001 From: Taylor Smock Date: Wed, 30 Oct 2019 13:45:06 -0600 Subject: [PATCH] Fix direction of command undo/redo Signed-off-by: Taylor Smock --- .../backend/MergeDuplicateWaysAction.java | 26 +++++++------------ .../commands/MergeDuplicateWays.java | 6 ++++- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/MergeDuplicateWaysAction.java b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/MergeDuplicateWaysAction.java index 04f19e4..817b51c 100644 --- a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/MergeDuplicateWaysAction.java +++ b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/MergeDuplicateWaysAction.java @@ -15,7 +15,6 @@ import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.gui.MainApplication; import org.openstreetmap.josm.plugins.mapwithai.MapWithAIPlugin; import org.openstreetmap.josm.plugins.mapwithai.commands.MergeDuplicateWays; -import org.openstreetmap.josm.tools.Logging; import org.openstreetmap.josm.tools.Shortcut; /** @@ -38,21 +37,16 @@ public class MergeDuplicateWaysAction extends JosmAction { public void actionPerformed(ActionEvent e) { final List ways = new ArrayList<>(MainApplication.getLayerManager().getActiveDataSet().getSelectedWays()); Command command = null; - int i = 0; - do { - if (ways.size() == 2) { - command = new MergeDuplicateWays(ways.get(0), ways.get(1)); - } else if (ways.size() == 1) { - command = new MergeDuplicateWays(ways.get(0)); - } else if (ways.isEmpty()) { - command = new MergeDuplicateWays(MainApplication.getLayerManager().getActiveDataSet()); - } - if (command != null) { - UndoRedoHandler.getInstance().add(command); - i++; - Logging.error(Integer.toString(i)); - } - } while (command != null && i < 10); + if (ways.size() == 2) { + command = new MergeDuplicateWays(ways.get(0), ways.get(1)); + } else if (ways.size() == 1) { + command = new MergeDuplicateWays(ways.get(0)); + } else if (ways.isEmpty()) { + command = new MergeDuplicateWays(MainApplication.getLayerManager().getActiveDataSet()); + } + if (command != null) { + UndoRedoHandler.getInstance().add(command); + } } } diff --git a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/commands/MergeDuplicateWays.java b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/commands/MergeDuplicateWays.java index a0f899e..6a5d614 100644 --- a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/commands/MergeDuplicateWays.java +++ b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/commands/MergeDuplicateWays.java @@ -17,6 +17,7 @@ import java.util.Set; import java.util.stream.Collectors; import org.openstreetmap.josm.command.ChangeCommand; +import org.openstreetmap.josm.command.ChangePropertyCommand; import org.openstreetmap.josm.command.Command; import org.openstreetmap.josm.command.DeleteCommand; import org.openstreetmap.josm.command.SequenceCommand; @@ -85,7 +86,9 @@ public class MergeDuplicateWays extends Command { @Override public void undoCommand() { - for (final Command tCommand : commands) { + List reversedCommands = new ArrayList<>(commands); + Collections.reverse(reversedCommands); + for (final Command tCommand : reversedCommands) { tCommand.undoCommand(); } } @@ -209,6 +212,7 @@ public class MergeDuplicateWays extends Command { if (newWay.getNodesCount() > 0) { commands.add(new DeleteCommand(way2)); commands.add(new ChangeCommand(way1, newWay)); + commands.add(new ChangePropertyCommand(way1.getDataSet(), Collections.singleton(newWay), way2.getKeys())); } if (commands.contains(null)) { commands = commands.stream().filter(Objects::nonNull).collect(Collectors.toList());