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    public 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}