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

Last change on this file since 3703 was 3262, checked in by bastiK, 14 years ago

extended command list dialog; added inspection panel

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