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

Last change on this file since 3152 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

  • Property svn:eol-style set to native
File size: 3.3 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 @Override
54 public MutableTreeNode description() {
55 return new DefaultMutableTreeNode(
56 new JLabel(
57 tr("Resolve conflicts in member list of relation {0}", my.getId()),
58 ImageProvider.get("data", "object"),
59 JLabel.HORIZONTAL
60 )
61 );
62 }
63
64 @Override
65 public boolean executeCommand() {
66 // remember the current state of 'my' way
67 //
68 super.executeCommand();
69
70 // replace the list of members of 'my' relation by the list of merged
71 // members
72 //
73 my.setMembers(mergedMembers);
74
75 // remember the layer
76 layer = Main.map.mapView.getEditLayer();
77 return true;
78 }
79
80 @Override
81 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
82 Collection<OsmPrimitive> added) {
83 modified.add(my);
84 }
85
86 @Override
87 public void undoCommand() {
88 if (! Main.map.mapView.hasLayer(layer)) {
89 logger.warning(tr("Cannot undo command ''{0}'' because layer ''{1}'' is not present any more",
90 this.toString(),
91 layer.toString()
92 ));
93 return;
94 }
95
96 Main.map.mapView.setActiveLayer(layer);
97 OsmDataLayer editLayer = Main.map.mapView.getEditLayer();
98
99 // restore the former state
100 //
101 super.undoCommand();
102
103 // restore a conflict if necessary
104 //
105 if (!editLayer.getConflicts().hasConflictForMy(my)) {
106 editLayer.getConflicts().add(my,their);
107 }
108 }
109}
Note: See TracBrowser for help on using the repository browser.