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

Last change on this file since 2512 was 2512, checked in by stoecker, 14 years ago

i18n updated, fixed files to reduce problems when applying patches, fix #4017

File size: 4.4 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.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.pair.ListMergeModel;
14import org.openstreetmap.josm.gui.conflict.pair.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 = e1.getRole().equals(e2.getRole());
27 if (!e1.getMember().isNew() ) {
28 ret = ret && (e1.getMember().getId() == e2.getMember().getId());
29 } else {
30 ret = ret && (e1 == e2);
31 }
32 return ret;
33 }
34
35 @Override
36 protected void buildMergedEntriesTableModel() {
37 // the table model for merged entries is different because it supports
38 // editing cells in the first column
39 //
40 mergedEntriesTableModel = this.new EntriesTableModel(ListRole.MERGED_ENTRIES) {
41 @Override
42 public boolean isCellEditable(int row, int column) {
43 switch(column) {
44 case 1: return true;
45 default: return false;
46 }
47 }
48 };
49 }
50
51 @Override
52 protected void setValueAt(DefaultTableModel model, Object value, int row, int col) {
53 if (model == getMergedTableModel() && col == 1) {
54 RelationMember memberOld = getMergedEntries().get(row);
55 RelationMember memberNew = new RelationMember((String)value,memberOld.getMember());
56 getMergedEntries().remove(row);
57 getMergedEntries().add(row,memberNew);
58 fireModelDataChanged();
59 }
60 }
61
62 /**
63 * populates the model with the relation members in relation my and their
64 *
65 * @param my my relation. Must not be null.
66 * @param their their relation. Must not be null.
67 *
68 * @throws IllegalArgumentException if my is null
69 * @throws IllegalArgumentException if their is null
70 */
71 public void populate(Relation my, Relation their) {
72 if (my == null)
73 throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null.", "my"));
74 if (their == null)
75 throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null.", "their"));
76
77 getMergedEntries().clear();
78 getMyEntries().clear();
79 getTheirEntries().clear();
80
81 for (RelationMember n : my.getMembers()) {
82 getMyEntries().add(n);
83 }
84 for (RelationMember n : their.getMembers()) {
85 getTheirEntries().add(n);
86 }
87 if (myAndTheirEntriesEqual()) {
88 for (RelationMember m : getMyEntries()) {
89 getMergedEntries().add(cloneEntryForMergedList(m));
90 }
91 setFrozen(true);
92 } else {
93 setFrozen(false);
94 }
95
96 fireModelDataChanged();
97 }
98
99 @Override
100 protected RelationMember cloneEntryForMergedList(RelationMember entry) {
101 return new RelationMember(entry);
102 }
103
104 /**
105 * Builds the command to resolve conflicts in the node list of a way
106 *
107 * @param my my relation. Must not be null.
108 * @param their their relation. Must not be null
109 * @return the command
110 * @exception IllegalArgumentException thrown, if my is null
111 * @exception IllegalArgumentException thrown, if their is null
112 * @exception IllegalStateException thrown, if the merge is not yet frozen
113 */
114 public RelationMemberConflictResolverCommand buildResolveCommand(Relation my, Relation their) {
115 if (my == null)
116 throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null.", "my"));
117 if (their == null)
118 throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null.", "their"));
119 if (! isFrozen())
120 throw new IllegalArgumentException(tr("Merged nodes not frozen yet. Can't build resolution command"));
121 return new RelationMemberConflictResolverCommand(my, their, getMergedEntries());
122 }
123}
Note: See TracBrowser for help on using the repository browser.