001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.conflict.pair; 003 004import javax.swing.JTable; 005import javax.swing.ListSelectionModel; 006import javax.swing.table.TableColumnModel; 007 008import org.openstreetmap.josm.command.conflict.ConflictResolveCommand; 009import org.openstreetmap.josm.data.osm.OsmPrimitive; 010import org.openstreetmap.josm.data.osm.PrimitiveId; 011import org.openstreetmap.josm.gui.layer.OsmDataLayer; 012import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable; 013import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel; 014 015/** 016 * This is the base class for all tables that display an {@link AbstractListMergeModel}. 017 */ 018public abstract class PairTable extends OsmPrimitivesTable { 019 020 private final transient AbstractListMergeModel<? extends PrimitiveId, ? extends ConflictResolveCommand> model; 021 022 /** 023 * Constructs a new {@code PairTable}. 024 * @param name table name 025 * @param model merge model 026 * @param dm table model 027 * @param cm column model 028 * @param sm selection model 029 */ 030 protected PairTable(String name, AbstractListMergeModel<? extends PrimitiveId, ? extends ConflictResolveCommand> model, 031 OsmPrimitivesTableModel dm, TableColumnModel cm, ListSelectionModel sm) { 032 super(dm, cm, sm); 033 this.model = model; 034 setName(name); 035 setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); 036 } 037 038 @Override 039 public OsmPrimitive getPrimitiveInLayer(int row, OsmDataLayer layer) { 040 OsmPrimitive result = super.getPrimitiveInLayer(row, layer); 041 if (model != null && result != null && layer != null && result.getDataSet() != layer.data) { 042 result = model.getMyPrimitiveById(result); 043 } 044 return result; 045 } 046}