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

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

fix squid:RedundantThrowsDeclarationCheck + consistent Javadoc for exceptions

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