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.IConflictResolver; 011import 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 */ 016public 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 @Override 052 public void populate(Conflict<? extends OsmPrimitive> conflict) { 053 Relation myRel = (Relation)conflict.getMy(); 054 Relation theirRel = (Relation)conflict.getTheir(); 055 ((RelationMemberListMergeModel)model).populate(myRel, theirRel, conflict.getMergedMap()); 056 myEntriesTable.setLayer(findLayerFor(myRel)); 057 theirEntriesTable.setLayer(findLayerFor(theirRel)); 058 } 059 060 public RelationMemberMerger() { 061 super(new RelationMemberListMergeModel()); 062 } 063 064 @Override 065 public void deletePrimitive(boolean deleted) { 066 if (deleted) { 067 model.clearMerged(); 068 model.setFrozen(true); 069 } else { 070 model.setFrozen(false); 071 } 072 } 073}