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

Last change on this file since 1654 was 1631, checked in by Gubaer, 15 years ago

added support for merging member lists of relations in extended conflict resolution dialog

File size: 2.7 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;
8
9import javax.swing.JLabel;
10import javax.swing.tree.DefaultMutableTreeNode;
11import javax.swing.tree.MutableTreeNode;
12
13import org.openstreetmap.josm.Main;
14import org.openstreetmap.josm.data.osm.OsmPrimitive;
15import org.openstreetmap.josm.data.osm.Relation;
16import org.openstreetmap.josm.data.osm.RelationMember;
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
26 /** my relation */
27 private final Relation my;
28 /** their relation */
29 private final Relation their;
30 /** the list of merged nodes. This becomes the list of news of my way after the
31 * command is executed
32 */
33 private final List<RelationMember> mergedMembers;
34
35 /**
36 *
37 * @param my my relation
38 * @param their their relation
39 * @param mergedNodeList the list of merged relation members
40 */
41 public RelationMemberConflictResolverCommand(Relation my, Relation their, List<RelationMember> mergedMembers) {
42 this.my = my;
43 this.their = their;
44 this.mergedMembers = mergedMembers;
45 }
46
47
48 @Override
49 public MutableTreeNode description() {
50 return new DefaultMutableTreeNode(
51 new JLabel(
52 tr("Resolve conflicts in member list of of relation {0}", my.id),
53 ImageProvider.get("data", "object"),
54 JLabel.HORIZONTAL
55 )
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 nodes of 'my' way by the list of merged
66 // nodes
67 //
68 my.members.clear();
69 for (int i=0; i<mergedMembers.size();i++) {
70 RelationMember n = mergedMembers.get(i);
71 my.members.add(n);
72 }
73 return true;
74 }
75
76 @Override
77 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
78 Collection<OsmPrimitive> added) {
79 modified.add(my);
80 }
81
82 @Override
83 public void undoCommand() {
84 // restore the former state
85 //
86 super.undoCommand();
87
88 // restore a conflict if necessary
89 //
90 if (!Main.map.conflictDialog.conflicts.containsKey(my)) {
91 Main.map.conflictDialog.conflicts.put(my,their);
92 }
93 }
94}
Note: See TracBrowser for help on using the repository browser.