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

Last change on this file since 1857 was 1750, checked in by Gubaer, 15 years ago

new: replaced global conflict list by conflict list per layer, similar to datasets

File size: 3.5 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.id),
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.members.clear();
75 for (int i=0; i<mergedMembers.size();i++) {
76 RelationMember n = mergedMembers.get(i);
77 my.members.add(n);
78 }
79
80 // remember the layer
81 layer = Main.main.map.mapView.getEditLayer();
82 return true;
83 }
84
85 @Override
86 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
87 Collection<OsmPrimitive> added) {
88 modified.add(my);
89 }
90
91 @Override
92 public void undoCommand() {
93 if (! Main.map.mapView.hasLayer(layer)) {
94 logger.warning(tr("Can't undo command ''{0}'' because layer ''{1}'' is not present anymore",
95 this.toString(),
96 layer.toString()
97 ));
98 return;
99 }
100
101 Main.map.mapView.setActiveLayer(layer);
102 OsmDataLayer editLayer = Main.map.mapView.getEditLayer();
103
104 // restore the former state
105 //
106 super.undoCommand();
107
108 // restore a conflict if necessary
109 //
110 if (!editLayer.getConflicts().hasConflictForMy(my)) {
111 editLayer.getConflicts().add(my,their);
112 }
113 }
114}
Note: See TracBrowser for help on using the repository browser.