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

Revision 4918, 3.0 KB checked in by simon04, 3 months ago (diff)

fix #7370 - Refactor Command.getDescription

  • Property svn:eol-style set to native
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.command;
3
4import static org.openstreetmap.josm.tools.I18n.marktr;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.util.Collection;
8import java.util.List;
9import javax.swing.Icon;
10
11
12import org.openstreetmap.josm.data.conflict.Conflict;
13import org.openstreetmap.josm.data.osm.OsmPrimitive;
14import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
15import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
16import org.openstreetmap.josm.gui.conflict.pair.tags.TagMergeItem;
17import org.openstreetmap.josm.tools.ImageProvider;
18
19/**
20 * Represents a the resolution of a tag conflict in an {@see OsmPrimitive}
21 *
22 */
23public class TagConflictResolveCommand extends ConflictResolveCommand {
24    /** the conflict to resolve */
25    private Conflict<? extends OsmPrimitive> conflict;
26
27    /** the list of merge decisions, represented as {@see TagMergeItem}s */
28    private final List<TagMergeItem> mergeItems;
29
30    /**
31     * replies the number of decided conflicts
32     *
33     * @return the number of decided conflicts
34     */
35    public int getNumDecidedConflicts() {
36        int n = 0;
37        for (TagMergeItem item: mergeItems) {
38            if (!item.getMergeDecision().equals(MergeDecisionType.UNDECIDED)) {
39                n++;
40            }
41        }
42        return n;
43    }
44
45    /**
46     * constructor
47     *
48     * @param my  my primitive
49     * @param their  their primitive
50     * @param mergeItems the list of merge decisions, represented as {@see TagMergeItem}s
51     */
52    public TagConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict, List<TagMergeItem> mergeItems) {
53        this.conflict = conflict;
54        this.mergeItems = mergeItems;
55    }
56
57    @Override
58    public String getDescriptionText() {
59        String msg = "";
60        switch(OsmPrimitiveType.from(conflict.getMy())) {
61        case NODE: msg = marktr("Resolve {0} tag conflicts in node {1}"); break;
62        case WAY: msg = marktr("Resolve {0} tag conflicts in way {1}"); break;
63        case RELATION: msg = marktr("Resolve {0} tag conflicts in relation {1}"); break;
64        }
65        return tr(msg,getNumDecidedConflicts(), conflict.getMy().getId());
66    }
67
68    @Override
69    public Icon getDescriptionIcon() {
70        return ImageProvider.get("data", "object");
71    }
72
73    @Override
74    public boolean executeCommand() {
75        // remember the current state of modified primitives, i.e. of
76        // OSM primitive 'my'
77        //
78        super.executeCommand();
79
80        // apply the merge decisions to OSM primitive 'my'
81        //
82        for (TagMergeItem item: mergeItems) {
83            if (! item.getMergeDecision().equals(MergeDecisionType.UNDECIDED)) {
84                item.applyToMyPrimitive(conflict.getMy());
85            }
86        }
87        rememberConflict(conflict);
88        return true;
89    }
90
91    @Override
92    public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
93            Collection<OsmPrimitive> added) {
94        modified.add(conflict.getMy());
95    }
96}
Note: See TracBrowser for help on using the repository browser.