source: josm/trunk/src/org/openstreetmap/josm/command/TagConflictResolveCommand.java@ 1894

Last change on this file since 1894 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.2 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.data.conflict.Conflict;
15import org.openstreetmap.josm.data.osm.OsmPrimitive;
16import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
17import org.openstreetmap.josm.gui.conflict.MergeDecisionType;
18import org.openstreetmap.josm.gui.conflict.tags.TagMergeItem;
19import org.openstreetmap.josm.tools.ImageProvider;
20
21/**
22 * Represents a the resolution of a tag conflict in an {@see OsmPrimitive}
23 *
24 */
25public class TagConflictResolveCommand extends ConflictResolveCommand {
26 private static final Logger logger = Logger.getLogger(TagConflictResolveCommand.class.getName());
27
28
29 /** the conflict to resolve */
30 private Conflict<OsmPrimitive> conflict;
31
32 /** the list of merge decisions, represented as {@see TagMergeItem}s */
33 private final List<TagMergeItem> mergeItems;
34
35
36 /**
37 * replies the number of decided conflicts
38 *
39 * @return the number of decided conflicts
40 */
41 public int getNumDecidedConflicts() {
42 int n = 0;
43 for (TagMergeItem item: mergeItems) {
44 if (!item.getMergeDecision().equals(MergeDecisionType.UNDECIDED)) {
45 n++;
46 }
47 }
48 return n;
49 }
50
51 /**
52 * constructor
53 *
54 * @param my my primitive
55 * @param their their primitive
56 * @param mergeItems the list of merge decisions, represented as {@see TagMergeItem}s
57 */
58 public TagConflictResolveCommand(OsmPrimitive my, OsmPrimitive their, List<TagMergeItem> mergeItems) {
59 this.conflict = new Conflict<OsmPrimitive>(my,their);
60 this.mergeItems = mergeItems;
61 }
62
63
64 @Override
65 public MutableTreeNode description() {
66 return new DefaultMutableTreeNode(
67 new JLabel(
68 tr("Resolve {0} tag conflicts in {1} {2}",getNumDecidedConflicts(), OsmPrimitiveType.from(conflict.getMy()).getLocalizedDisplayNameSingular(), conflict.getMy().id),
69 ImageProvider.get("data", "object"),
70 JLabel.HORIZONTAL
71 )
72 );
73 }
74
75 @Override
76 public boolean executeCommand() {
77 // remember the current state of modified primitives, i.e. of
78 // OSM primitive 'my'
79 //
80 super.executeCommand();
81
82 // apply the merge decisions to OSM primitive 'my'
83 //
84 for (TagMergeItem item: mergeItems) {
85 if (! item.getMergeDecision().equals(MergeDecisionType.UNDECIDED)) {
86 item.applyToMyPrimitive(conflict.getMy());
87 }
88 }
89 rememberConflict(conflict);
90 return true;
91 }
92
93 @Override
94 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
95 Collection<OsmPrimitive> added) {
96 modified.add(conflict.getMy());
97 }
98}
Note: See TracBrowser for help on using the repository browser.