001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.gui.conflict.pair.relation;
003
004 import javax.swing.JScrollPane;
005
006 import org.openstreetmap.josm.data.conflict.Conflict;
007 import org.openstreetmap.josm.data.osm.OsmPrimitive;
008 import org.openstreetmap.josm.data.osm.Relation;
009 import org.openstreetmap.josm.data.osm.RelationMember;
010 import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver;
011 import org.openstreetmap.josm.gui.conflict.pair.ListMerger;
012
013 /**
014 * A UI component for resolving conflicts in the member lists of two {@link Relation}
015 */
016 public class RelationMemberMerger extends ListMerger<RelationMember> implements IConflictResolver {
017 @Override
018 protected JScrollPane buildMyElementsTable() {
019 myEntriesTable = new RelationMemberTable(
020 "table.mymembers",
021 model,
022 model.getMyTableModel(),
023 model.getMySelectionModel()
024 );
025 return embeddInScrollPane(myEntriesTable);
026 }
027
028 @Override
029 protected JScrollPane buildMergedElementsTable() {
030 mergedEntriesTable = new RelationMemberTable(
031 "table.mergedmembers",
032 model,
033 model.getMergedTableModel(),
034 model.getMergedSelectionModel()
035 );
036 mergedEntriesTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
037 return embeddInScrollPane(mergedEntriesTable);
038 }
039
040 @Override
041 protected JScrollPane buildTheirElementsTable() {
042 theirEntriesTable = new RelationMemberTable(
043 "table.theirmembers",
044 model,
045 model.getTheirTableModel(),
046 model.getTheirSelectionModel()
047 );
048 return embeddInScrollPane(theirEntriesTable);
049 }
050
051 public void populate(Conflict<? extends OsmPrimitive> conflict) {
052 Relation myRel = (Relation)conflict.getMy();
053 Relation theirRel = (Relation)conflict.getTheir();
054 ((RelationMemberListMergeModel)model).populate(myRel, theirRel, conflict.getMergedMap());
055 myEntriesTable.setLayer(findLayerFor(myRel));
056 theirEntriesTable.setLayer(findLayerFor(theirRel));
057 }
058
059 public RelationMemberMerger() {
060 super(new RelationMemberListMergeModel());
061 }
062
063 public void deletePrimitive(boolean deleted) {
064 if (deleted) {
065 model.clearMerged();
066 model.setFrozen(true);
067 } else {
068 model.setFrozen(false);
069 }
070 }
071 }