Ticket #2755: duplicate.txt

File duplicate.txt, 2.8 KB (added by dmuecke, 3 years ago)
Line 
1Index: src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java
2===================================================================
3--- src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java       (revision 16489)
4+++ src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java       (working copy)
5@@ -2,8 +2,15 @@
6 
7 import static org.openstreetmap.josm.tools.I18n.tr;
8 
9+import java.awt.GridBagLayout;
10+import java.awt.geom.Area;
11 import java.util.*;
12 
13+import javax.swing.JLabel;
14+import javax.swing.JOptionPane;
15+import javax.swing.JPanel;
16+
17+import org.openstreetmap.josm.Main;
18 import org.openstreetmap.josm.actions.MergeNodesAction;
19 import org.openstreetmap.josm.command.*;
20 import org.openstreetmap.josm.data.coor.LatLon;
21@@ -12,6 +19,7 @@
22 import org.openstreetmap.josm.plugins.validator.Test;
23 import org.openstreetmap.josm.plugins.validator.TestError;
24 import org.openstreetmap.josm.plugins.validator.util.Bag;
25+import org.openstreetmap.josm.tools.DontShowAgainInfo;
26 /**
27  * Tests if there are duplicate nodes
28  *
29@@ -89,7 +97,8 @@
30         if (target == null)
31             target = nodes.iterator().next();
32 
33-        MergeNodesAction.mergeNodes(nodes, target);
34+        if(checkAndConfirmOutlyingDeletes(nodes))
35+            MergeNodesAction.mergeNodes(nodes, target);
36 
37         return null; // undoRedo handling done in mergeNodes
38     }
39@@ -99,4 +108,33 @@
40     {
41         return (testError.getTester() instanceof DuplicateNode);
42     }
43+
44+    /**
45+     * Check whether user is about to delete data outside of the download area.
46+     * Request confirmation if he is.
47+     */
48+    private static boolean checkAndConfirmOutlyingDeletes(LinkedList<Node> del) {
49+        Area a = Main.ds.getDataSourceArea();
50+        if (a != null) {
51+            for (OsmPrimitive osm : del) {
52+                if (osm instanceof Node && osm.id != 0) {
53+                    Node n = (Node) osm;
54+                    if (!a.contains(n.getCoor())) {
55+                        JPanel msg = new JPanel(new GridBagLayout());
56+                        msg.add(new JLabel(
57+                                "<html>" +
58+                                // leave message in one tr() as there is a grammatical connection.
59+                                tr("You are about to delete nodes outside of the area you have downloaded." +
60+                                        "<br>" +
61+                                        "This can cause problems because other objects (that you don't see) might use them." +
62+                                        "<br>" +
63+                                "Do you really want to delete?") + "</html>"));
64+                        return DontShowAgainInfo.show("delete_outside_nodes", msg, false, JOptionPane.YES_NO_OPTION, JOptionPane.YES_OPTION);
65+                    }
66+
67+                }
68+            }
69+        }
70+        return true;
71+    }
72 }