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

Last change on this file since 1928 was 1928, checked in by jttt, 15 years ago

Make parameterless RelationMember constructor deprecated

File size: 4.5 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.relation;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.logging.Logger;
7
8import javax.swing.table.DefaultTableModel;
9
10import org.openstreetmap.josm.command.RelationMemberConflictResolverCommand;
11import org.openstreetmap.josm.data.osm.Relation;
12import org.openstreetmap.josm.data.osm.RelationMember;
13import org.openstreetmap.josm.gui.conflict.ListMergeModel;
14import org.openstreetmap.josm.gui.conflict.ListRole;
15/**
16 * The model for merging two lists of relation members
17 *
18 *
19 */
20public class RelationMemberListMergeModel extends ListMergeModel<RelationMember>{
21
22 private static final Logger logger = Logger.getLogger(RelationMemberListMergeModel.class.getName());
23
24 @Override
25 public boolean isEqualEntry(RelationMember e1, RelationMember e2) {
26 boolean ret =
27 ( (e1.role == null && e2.role == null)
28 || (e1.role != null && e1.role.equals(e2.role))
29 );
30 if (e1.member.id > 0 ) {
31 ret = ret && (e1.member.id == e2.member.id);
32 } else {
33 ret = ret && (e1 == e2);
34 }
35 return ret;
36 }
37
38 @Override
39 protected void buildMergedEntriesTableModel() {
40 // the table model for merged entries is different because it supports
41 // editing cells in the first column
42 //
43 mergedEntriesTableModel = this.new EntriesTableModel(ListRole.MERGED_ENTRIES) {
44 @Override
45 public boolean isCellEditable(int row, int column) {
46 switch(column) {
47 case 1: return true;
48 default: return false;
49 }
50 }
51 };
52 }
53
54 @Override
55 protected void setValueAt(DefaultTableModel model, Object value, int row, int col) {
56 if (model == getMergedTableModel() && col == 1) {
57 RelationMember member = getMergedEntries().get(row);
58 member.role = (String)value;
59 fireModelDataChanged();
60 }
61 }
62
63 /**
64 * populates the model with the relation members in relation my and their
65 *
66 * @param my my relation. Must not be null.
67 * @param their their relation. Must not be null.
68 *
69 * @throws IllegalArgumentException if my is null
70 * @throws IllegalArgumentException if their is null
71 */
72 public void populate(Relation my, Relation their) {
73 if (my == null)
74 throw new IllegalArgumentException(tr("parameter '{0}' must not be null", "my"));
75 if (their == null)
76 throw new IllegalArgumentException(tr("parameter '{0}' must not be null", "their"));
77
78 getMergedEntries().clear();
79 getMyEntries().clear();
80 getTheirEntries().clear();
81
82 for (RelationMember n : my.getMembers()) {
83 getMyEntries().add(n);
84 }
85 for (RelationMember n : their.getMembers()) {
86 getTheirEntries().add(n);
87 }
88 if (myAndTheirEntriesEqual()) {
89 for (RelationMember m : getMyEntries()) {
90 getMergedEntries().add(cloneEntryForMergedList(m));
91 }
92 setFrozen(true);
93 } else {
94 setFrozen(false);
95 }
96
97 fireModelDataChanged();
98 }
99
100 @Override
101 protected RelationMember cloneEntryForMergedList(RelationMember entry) {
102 return new RelationMember(entry.role, entry.member);
103 }
104
105 /**
106 * Builds the command to resolve conflicts in the node list of a way
107 *
108 * @param my my relation. Must not be null.
109 * @param their their relation. Must not be null
110 * @return the command
111 * @exception IllegalArgumentException thrown, if my is null
112 * @exception IllegalArgumentException thrown, if their is null
113 * @exception IllegalStateException thrown, if the merge is not yet frozen
114 */
115 public RelationMemberConflictResolverCommand buildResolveCommand(Relation my, Relation their) {
116 if (my == null)
117 throw new IllegalArgumentException(tr("parameter '{0}' must not be null", "my"));
118 if (their == null)
119 throw new IllegalArgumentException(tr("parameter '{0}' must not be null", "their"));
120 if (! isFrozen())
121 throw new IllegalArgumentException(tr("merged nodes not frozen yet. Can't build resolution command"));
122 return new RelationMemberConflictResolverCommand(my, their, getMergedEntries());
123 }
124}
Note: See TracBrowser for help on using the repository browser.