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
013public abstract class TagMergeTableCellRenderer extends JLabel implements TableCellRenderer {
014
015    protected abstract void renderKey(TagMergeItem item, boolean isSelected);
016
017    protected abstract void renderValue(TagMergeItem item, boolean isSelected);
018
019    protected void reset() {
020        setOpaque(true);
021        setBackground(ConflictColors.BGCOLOR.get());
022        setForeground(ConflictColors.FGCOLOR.get());
023    }
024
025    @Override
026    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
027            int col) {
028
029        reset();
030        if (value == null)
031            return this;
032
033        TagMergeItem item = (TagMergeItem) value;
034        switch(col) {
035        case 0:
036            renderKey(item, isSelected);
037            break;
038        case 1:
039            renderValue(item, isSelected);
040            break;
041        default:
042            // should not happen, but just in case
043            throw new IllegalArgumentException(MessageFormat.format("Parameter 'col' must be 0 or 1. Got {0}.", col));
044        }
045        return this;
046    }
047}