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}