001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.changeset;
003
004import static org.openstreetmap.josm.tools.I18n.trc;
005
006import java.awt.Component;
007import java.awt.Font;
008
009import javax.swing.JTable;
010import javax.swing.UIManager;
011
012import org.openstreetmap.josm.data.osm.Changeset;
013
014/**
015 * The cell renderer for the changeset table
016 * @since 2689
017 */
018public class ChangesetCacheTableCellRenderer extends AbstractCellRenderer {
019
020    protected void renderUploadComment(Changeset cs) {
021        String comment = cs.get("comment");
022        if (comment == null || comment.trim().isEmpty()) {
023            setText(trc("changeset.upload-comment", "empty"));
024            setFont(UIManager.getFont("Table.font").deriveFont(Font.ITALIC));
025        } else {
026            setText(comment);
027            setToolTipText(comment);
028            setFont(UIManager.getFont("Table.font"));
029        }
030    }
031
032    protected void renderOpen(Changeset cs) {
033        if (cs.isOpen()) {
034            setText(trc("changeset.state", "Open"));
035        } else {
036            setText(trc("changeset.state", "Closed"));
037        }
038        setToolTipText(null);
039    }
040
041    protected void renderDiscussions(Changeset cs) {
042        setText(Integer.toString(cs.getCommentsCount()));
043        setToolTipText(null);
044    }
045
046    @Override
047    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
048            int row, int column) {
049        if (value == null)
050            return this;
051        reset();
052        renderColors(isSelected);
053        Changeset cs = (Changeset)value;
054        switch(column) {
055        case 0: /* id */ renderId(cs.getId()); break;
056        case 1: /* upload comment */ renderUploadComment(cs); break;
057        case 2: /* open/closed */ renderOpen(cs); break;
058        case 3: /* user */ renderUser(cs.getUser()); break;
059        case 4: /* created at */ renderDate(cs.getCreatedAt()); break;
060        case 5: /* closed at */ renderDate(cs.getClosedAt()); break;
061        case 6: /* discussions */ renderDiscussions(cs); break;
062        }
063        return this;
064    }
065}