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 }