001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.conflict.pair.tags;
003
004import java.awt.Component;
005import java.text.MessageFormat;
006
007import javax.swing.JLabel;
008import javax.swing.JTable;
009import javax.swing.table.TableCellRenderer;
010
011import org.openstreetmap.josm.gui.conflict.ConflictColors;
012
013/**
014 * This is the base class for all cells in the {@link TagMerger}.
015 */
016public abstract class TagMergeTableCellRenderer extends JLabel implements TableCellRenderer {
017
018    protected abstract void renderKey(TagMergeItem item, boolean isSelected);
019
020    protected abstract void renderValue(TagMergeItem item, boolean isSelected);
021
022    protected void reset() {
023        setOpaque(true);
024        setBackground(ConflictColors.BGCOLOR.get());
025        setForeground(ConflictColors.FGCOLOR.get());
026    }
027
028    @Override
029    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
030            int col) {
031
032        reset();
033        if (value == null)
034            return this;
035
036        TagMergeItem item = (TagMergeItem) value;
037        switch(col) {
038        case 0:
039            renderKey(item, isSelected);
040            break;
041        case 1:
042            renderValue(item, isSelected);
043            break;
044        default:
045            // should not happen, but just in case
046            throw new IllegalArgumentException(MessageFormat.format("Parameter 'col' must be 0 or 1. Got {0}.", col));
047        }
048        return this;
049    }
050}