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