Ticket #1582: MergeNodes2Action.java

File MergeNodes2Action.java, 2.5 KB (added by Henry Loenwind, 18 years ago)
Line 
1//License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.GridBagLayout;
7import java.awt.event.ActionEvent;
8import java.awt.event.KeyEvent;
9import java.util.ArrayList;
10import java.util.Collection;
11import java.util.HashMap;
12import java.util.HashSet;
13import java.util.LinkedList;
14import java.util.Map;
15import java.util.Set;
16import java.util.TreeMap;
17import java.util.TreeSet;
18import java.util.Map.Entry;
19
20import javax.swing.Box;
21import javax.swing.JComboBox;
22import javax.swing.JLabel;
23import javax.swing.JOptionPane;
24import javax.swing.JPanel;
25
26import org.openstreetmap.josm.Main;
27import org.openstreetmap.josm.command.ChangeCommand;
28import org.openstreetmap.josm.command.Command;
29import org.openstreetmap.josm.command.DeleteCommand;
30import org.openstreetmap.josm.command.SequenceCommand;
31import org.openstreetmap.josm.data.SelectionChangedListener;
32import org.openstreetmap.josm.data.osm.DataSet;
33import org.openstreetmap.josm.data.osm.Node;
34import org.openstreetmap.josm.data.osm.OsmPrimitive;
35import org.openstreetmap.josm.data.osm.Relation;
36import org.openstreetmap.josm.data.osm.RelationMember;
37import org.openstreetmap.josm.data.osm.TigerUtils;
38import org.openstreetmap.josm.data.osm.Way;
39import org.openstreetmap.josm.data.osm.visitor.CollectBackReferencesVisitor;
40import org.openstreetmap.josm.tools.GBC;
41import org.openstreetmap.josm.tools.Pair;
42
43
44/**
45 * Merge two or more nodes into one node - variant that uses the other node.
46 * (based on MergeNodesAction)
47 *
48 * @author Henry Loenwind, based on work of Matthew Newton
49 *
50 */
51public class MergeNodes2Action extends MergeNodesAction implements SelectionChangedListener {
52
53 public MergeNodes2Action() {
54 super(tr("Merge Nodes (2)"), "mergenodes", tr("Merge nodes into the newest one."), 0, 0, true);
55 DataSet.selListeners.add(this);
56 }
57
58 public void actionPerformed(ActionEvent event) {
59 Collection<OsmPrimitive> selection = Main.ds.getSelected();
60 LinkedList<Node> selectedNodes = new LinkedList<Node>();
61 Node useNode = null;
62
63 // the selection check should stop this procedure starting if
64 // nothing but node are selected - otherwise we don't care
65 // anyway as long as we have at least two nodes
66 for (OsmPrimitive osm : selection)
67 if (osm instanceof Node){
68 selectedNodes.add((Node)osm);
69 useNode = (Node)osm;
70 }
71
72 if (selectedNodes.size() < 2) {
73 JOptionPane.showMessageDialog(Main.parent, tr("Please select at least two nodes to merge."));
74 return;
75 }
76
77 mergeNodes(selectedNodes, useNode);
78 }
79
80}