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.getComment();
022        if (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 renderChanges(Changeset cs) {
042        setText(Integer.toString(cs.getChangesCount()));
043        setToolTipText(null);
044    }
045
046    protected void renderDiscussions(Changeset cs) {
047        setText(Integer.toString(cs.getCommentsCount()));
048        setToolTipText(null);
049    }
050
051    @Override
052    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
053            int row, int column) {
054        if (value == null)
055            return this;
056        reset();
057        renderColors(isSelected);
058        Changeset cs = (Changeset) value;
059        switch(column) {
060        case 0: /* id */ renderId(cs.getId()); break;
061        case 1: /* upload comment */ renderUploadComment(cs); break;
062        case 2: /* open/closed */ renderOpen(cs); break;
063        case 3: /* user */ renderUser(cs.getUser()); break;
064        case 4: /* created at */ renderDate(cs.getCreatedAt()); break;
065        case 5: /* closed at */ renderDate(cs.getClosedAt()); break;
066        case 6: /* changes */ renderChanges(cs); break;
067        case 7: /* discussions */ renderDiscussions(cs); break;
068        default: // Do nothing
069        }
070        return this;
071    }
072}