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

Last change on this file since 2882 was 2882, checked in by jttt, 14 years ago

Fixed #4409 after confict management: nodes are not selectable

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