Ticket #2755: duplicate.txt

File duplicate.txt, 2.8 KB (added by dmuecke, 16 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 }