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

Last change on this file since 2846 was 2846, checked in by mjulius, 14 years ago

fix messages for gui/conflict

File size: 4.1 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.ArrayList;
7import java.util.logging.Logger;
8
9import javax.swing.table.DefaultTableModel;
10
11import org.openstreetmap.josm.command.RelationMemberConflictResolverCommand;
12import org.openstreetmap.josm.data.osm.Relation;
13import org.openstreetmap.josm.data.osm.RelationMember;
14import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
15import org.openstreetmap.josm.gui.conflict.pair.ListRole;
16import org.openstreetmap.josm.tools.CheckParameterUtil;
17/**
18 * The model for merging two lists of relation members
19 *
20 */
21public class RelationMemberListMergeModel extends ListMergeModel<RelationMember>{
22
23 private static final Logger logger = Logger.getLogger(RelationMemberListMergeModel.class.getName());
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 *
63 * @throws IllegalArgumentException if my is null
64 * @throws IllegalArgumentException if their is null
65 */
66 public void populate(Relation my, Relation their) {
67 CheckParameterUtil.ensureParameterNotNull(my, "my");
68 CheckParameterUtil.ensureParameterNotNull(their, "their");
69
70 getMergedEntries().clear();
71 getMyEntries().clear();
72 getTheirEntries().clear();
73
74 for (RelationMember n : my.getMembers()) {
75 getMyEntries().add(n);
76 }
77 for (RelationMember n : their.getMembers()) {
78 getTheirEntries().add(n);
79 }
80 if (myAndTheirEntriesEqual()) {
81 for (RelationMember m : getMyEntries()) {
82 getMergedEntries().add(cloneEntryForMergedList(m));
83 }
84 setFrozen(true);
85 } else {
86 setFrozen(false);
87 }
88
89 fireModelDataChanged();
90 }
91
92 @Override
93 protected RelationMember cloneEntryForMergedList(RelationMember entry) {
94 return new RelationMember(entry);
95 }
96
97 /**
98 * Builds the command to resolve conflicts in the node list of a way
99 *
100 * @param my my relation. Must not be null.
101 * @param their their relation. Must not be null
102 * @return the command
103 * @exception IllegalArgumentException thrown, if my is null
104 * @exception IllegalArgumentException thrown, if their is null
105 * @exception IllegalStateException thrown, if the merge is not yet frozen
106 */
107 public RelationMemberConflictResolverCommand buildResolveCommand(Relation my, Relation their) {
108 CheckParameterUtil.ensureParameterNotNull(my, "my");
109 CheckParameterUtil.ensureParameterNotNull(their, "their");
110 if (! isFrozen())
111 throw new IllegalArgumentException(tr("Merged nodes not frozen yet. Cannot build resolution command"));
112 ArrayList<RelationMember> entries = getMergedEntries();
113 return new RelationMemberConflictResolverCommand(my, their, entries);
114 }
115}
Note: See TracBrowser for help on using the repository browser.