source: josm/trunk/src/org/openstreetmap/josm/command/RelationMemberConflictResolverCommand.java@ 2284

Last change on this file since 2284 was 2163, checked in by stoecker, 15 years ago

fixed typos

File size: 3.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.command;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.Collection;
7import java.util.List;
8import java.util.logging.Logger;
9
10import javax.swing.JLabel;
11import javax.swing.tree.DefaultMutableTreeNode;
12import javax.swing.tree.MutableTreeNode;
13
14import org.openstreetmap.josm.Main;
15import org.openstreetmap.josm.data.osm.OsmPrimitive;
16import org.openstreetmap.josm.data.osm.Relation;
17import org.openstreetmap.josm.data.osm.RelationMember;
18import org.openstreetmap.josm.gui.layer.OsmDataLayer;
19import org.openstreetmap.josm.tools.ImageProvider;
20
21/**
22 * Represent a command for resolving conflicts in the member lists of two
23 * {@see Relation}s.
24 *
25 */
26public class RelationMemberConflictResolverCommand extends Command {
27 private static final Logger logger = Logger.getLogger(RelationMemberConflictResolverCommand.class.getName());
28
29 /** my relation */
30 private final Relation my;
31 /** their relation */
32 private final Relation their;
33 /** the list of merged nodes. This becomes the list of news of my way after the
34 * command is executed
35 */
36 private final List<RelationMember> mergedMembers;
37
38 /** the layer this conflict is resolved in */
39 private OsmDataLayer layer;
40
41 /**
42 *
43 * @param my my relation
44 * @param their their relation
45 * @param mergedNodeList the list of merged relation members
46 */
47 public RelationMemberConflictResolverCommand(Relation my, Relation their, List<RelationMember> mergedMembers) {
48 this.my = my;
49 this.their = their;
50 this.mergedMembers = mergedMembers;
51 }
52
53
54 @Override
55 public MutableTreeNode description() {
56 return new DefaultMutableTreeNode(
57 new JLabel(
58 tr("Resolve conflicts in member list of relation {0}", my.getId()),
59 ImageProvider.get("data", "object"),
60 JLabel.HORIZONTAL
61 )
62 );
63 }
64
65 @Override
66 public boolean executeCommand() {
67 // remember the current state of 'my' way
68 //
69 super.executeCommand();
70
71 // replace the list of nodes of 'my' way by the list of merged
72 // nodes
73 //
74 my.setMembers(mergedMembers);
75
76 // remember the layer
77 layer = Main.map.mapView.getEditLayer();
78 return true;
79 }
80
81 @Override
82 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
83 Collection<OsmPrimitive> added) {
84 modified.add(my);
85 }
86
87 @Override
88 public void undoCommand() {
89 if (! Main.map.mapView.hasLayer(layer)) {
90 logger.warning(tr("Can't undo command ''{0}'' because layer ''{1}'' is not present any more",
91 this.toString(),
92 layer.toString()
93 ));
94 return;
95 }
96
97 Main.map.mapView.setActiveLayer(layer);
98 OsmDataLayer editLayer = Main.map.mapView.getEditLayer();
99
100 // restore the former state
101 //
102 super.undoCommand();
103
104 // restore a conflict if necessary
105 //
106 if (!editLayer.getConflicts().hasConflictForMy(my)) {
107 editLayer.getConflicts().add(my,their);
108 }
109 }
110}
Note: See TracBrowser for help on using the repository browser.