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}