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

Last change on this file since 3083 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

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