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