source: josm/trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java@ 11330

Last change on this file since 11330 was 11330, checked in by Don-vip, 7 years ago

sonar - fix recent issues

  • Property svn:eol-style set to native
File size: 3.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.pair.relation;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.Map;
7
8import javax.swing.table.DefaultTableModel;
9
10import org.openstreetmap.josm.command.conflict.RelationMemberConflictResolverCommand;
11import org.openstreetmap.josm.data.conflict.Conflict;
12import org.openstreetmap.josm.data.osm.OsmPrimitive;
13import org.openstreetmap.josm.data.osm.PrimitiveId;
14import org.openstreetmap.josm.data.osm.Relation;
15import org.openstreetmap.josm.data.osm.RelationMember;
16import org.openstreetmap.josm.gui.conflict.pair.AbstractListMergeModel;
17import org.openstreetmap.josm.gui.conflict.pair.ListRole;
18import org.openstreetmap.josm.tools.CheckParameterUtil;
19
20/**
21 * The model for merging two lists of relation members
22 * @since 1631
23 */
24public class RelationMemberListMergeModel extends AbstractListMergeModel<RelationMember, RelationMemberConflictResolverCommand> {
25
26 @Override
27 public boolean isEqualEntry(RelationMember e1, RelationMember e2) {
28 return e1.equals(e2);
29 }
30
31 @Override
32 protected void buildMergedEntriesTableModel() {
33 // the table model for merged entries is different because it supports
34 // editing cells in the first column
35 //
36 mergedEntriesTableModel = this.new EntriesTableModel(ListRole.MERGED_ENTRIES) {
37 @Override
38 public boolean isCellEditable(int row, int column) {
39 switch(column) {
40 case 1: return true;
41 default: return false;
42 }
43 }
44 };
45 }
46
47 @Override
48 protected void setValueAt(DefaultTableModel model, Object value, int row, int col) {
49 if (model == getMergedTableModel() && col == 1) {
50 RelationMember memberOld = getMergedEntries().get(row);
51 RelationMember memberNew = new RelationMember((String) value, memberOld.getMember());
52 getMergedEntries().remove(row);
53 getMergedEntries().add(row, memberNew);
54 fireModelDataChanged();
55 }
56 }
57
58 /**
59 * populates the model with the relation members in relation my and their
60 *
61 * @param my my relation. Must not be null.
62 * @param their their relation. Must not be null.
63 * @param mergedMap The map of merged primitives if the conflict results from merging two layers
64 *
65 * @throws IllegalArgumentException if my is null
66 * @throws IllegalArgumentException if their is null
67 */
68 public void populate(Relation my, Relation their, Map<PrimitiveId, PrimitiveId> mergedMap) {
69 initPopulate(my, their, mergedMap);
70
71 for (RelationMember n : my.getMembers()) {
72 getMyEntries().add(n);
73 }
74 for (RelationMember n : their.getMembers()) {
75 getTheirEntries().add(n);
76 }
77 if (myAndTheirEntriesEqual()) {
78 for (RelationMember m : getMyEntries()) {
79 getMergedEntries().add(cloneEntryForMergedList(m));
80 }
81 setFrozen(true);
82 } else {
83 setFrozen(false);
84 }
85
86 fireModelDataChanged();
87 }
88
89 @Override
90 protected RelationMember cloneEntryForMergedList(RelationMember entry) {
91 return new RelationMember(entry.getRole(), getMyPrimitive(entry));
92 }
93
94 @Override
95 public OsmPrimitive getMyPrimitive(RelationMember entry) {
96 return getMyPrimitiveById(entry.getMember());
97 }
98
99 @Override
100 public RelationMemberConflictResolverCommand buildResolveCommand(Conflict<? extends OsmPrimitive> conflict) {
101 CheckParameterUtil.ensureParameterNotNull(conflict, "conflict");
102 if (!isFrozen())
103 throw new IllegalArgumentException(tr("Merged members not frozen yet. Cannot build resolution command"));
104 return new RelationMemberConflictResolverCommand(conflict, getMergedEntries());
105 }
106}
Note: See TracBrowser for help on using the repository browser.