001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.dialogs.changeset;
003    
004    import static org.openstreetmap.josm.tools.I18n.tr;
005    
006    import java.awt.Component;
007    
008    import javax.swing.JLabel;
009    import javax.swing.JTable;
010    import javax.swing.UIManager;
011    import javax.swing.table.TableCellRenderer;
012    
013    import org.openstreetmap.josm.data.osm.ChangesetDataSet.ChangesetModificationType;
014    import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
015    
016    /**
017     * The table cell renderer used in the changeset content table, except for the "name"
018     * column in which we use a {@link OsmPrimitivRenderer}.
019     *
020     */
021    public class ChangesetContentTableCellRenderer extends JLabel implements TableCellRenderer{
022    
023        public ChangesetContentTableCellRenderer() {
024            setOpaque(true);
025        }
026    
027        protected void reset() {
028            setBackground(UIManager.getColor("Table.background"));
029            setForeground(UIManager.getColor("Table.foreground"));
030            setFont(UIManager.getFont("Table.font"));
031        }
032    
033        protected void renderColors(boolean isSelected) {
034            if (isSelected) {
035                setBackground(UIManager.getColor("Table.selectionBackground"));
036                setForeground(UIManager.getColor("Table.selectionForeground"));
037            } else {
038                setBackground(UIManager.getColor("Table.background"));
039                setForeground(UIManager.getColor("Table.foreground"));
040            }
041        }
042    
043        protected void renderId(HistoryOsmPrimitive primitive) {
044            setText(Long.toString(primitive.getId()));
045            setToolTipText("");
046        }
047    
048        protected void renderModificationType(ChangesetModificationType type) {
049            switch(type) {
050            case CREATED: setText(tr("Created")); break;
051            case UPDATED: setText(tr("Updated")); break;
052            case DELETED: setText(tr("Deleted")); break;
053            }
054            setToolTipText("");
055        }
056    
057        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
058                int row, int column) {
059            if (value == null)
060                return this;
061            reset();
062            renderColors(isSelected);
063            switch(column) {
064            case 0:
065                ChangesetModificationType type = (ChangesetModificationType)value;
066                renderModificationType(type);
067                break;
068            case 1:
069                HistoryOsmPrimitive primitive = (HistoryOsmPrimitive)value;
070                renderId(primitive);
071                break;
072            default:
073                /* do nothing */
074            }
075            return this;
076        }
077    }