001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.changeset; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005import static org.openstreetmap.josm.tools.I18n.trc; 006 007import java.awt.Component; 008import java.awt.Font; 009import java.text.DateFormat; 010import java.util.Date; 011 012import javax.swing.JLabel; 013import javax.swing.JTable; 014import javax.swing.UIManager; 015import javax.swing.table.TableCellRenderer; 016 017import org.openstreetmap.josm.data.osm.Changeset; 018import org.openstreetmap.josm.data.osm.User; 019import org.openstreetmap.josm.tools.date.DateUtils; 020 021/** 022 * The cell renderer for the changeset table 023 * @since 2689 024 */ 025public class ChangesetCacheTableCellRenderer extends JLabel implements TableCellRenderer{ 026 027 /** 028 * Constructs a new {@code ChangesetCacheTableCellRenderer}. 029 */ 030 public ChangesetCacheTableCellRenderer() { 031 setOpaque(true); 032 } 033 034 protected void reset() { 035 setBackground(UIManager.getColor("Table.background")); 036 setForeground(UIManager.getColor("Table.foreground")); 037 setFont(UIManager.getFont("Table.font")); 038 setToolTipText(""); 039 } 040 041 protected void renderColors(boolean isSelected) { 042 if (isSelected) { 043 setBackground(UIManager.getColor("Table.selectionBackground")); 044 setForeground(UIManager.getColor("Table.selectionForeground")); 045 } else { 046 setBackground(UIManager.getColor("Table.background")); 047 setForeground(UIManager.getColor("Table.foreground")); 048 } 049 } 050 051 protected void renderId(Changeset cs) { 052 setText(Integer.toString(cs.getId())); 053 setToolTipText(""); 054 } 055 056 protected void renderUploadComment(Changeset cs) { 057 String comment = cs.get("comment"); 058 if (comment == null || comment.trim().isEmpty()) { 059 setText(trc("changeset.upload-comment", "empty")); 060 setFont(UIManager.getFont("Table.font").deriveFont(Font.ITALIC)); 061 } else { 062 setText(comment); 063 setToolTipText(comment); 064 setFont(UIManager.getFont("Table.font")); 065 } 066 } 067 068 protected void renderOpen(Changeset cs) { 069 if (cs.isOpen()) { 070 setText(trc("changeset.state", "Open")); 071 } else { 072 setText(trc("changeset.state", "Closed")); 073 } 074 setToolTipText(""); 075 } 076 077 protected void renderUser(Changeset cs) { 078 User user = cs.getUser(); 079 if (user == null || user.getName().trim().isEmpty()) { 080 setFont(UIManager.getFont("Table.font").deriveFont(Font.ITALIC)); 081 setText(tr("anonymous")); 082 } else { 083 setFont(UIManager.getFont("Table.font")); 084 setText(user.getName()); 085 setToolTipText(user.getName()); 086 } 087 } 088 089 protected void renderDate(Date d) { 090 if (d == null) { 091 setText(""); 092 } else { 093 setText(DateUtils.formatDateTime(d, DateFormat.SHORT, DateFormat.SHORT)); 094 } 095 setToolTipText(""); 096 } 097 098 @Override 099 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 100 int row, int column) { 101 if (value == null) 102 return this; 103 reset(); 104 renderColors(isSelected); 105 Changeset cs = (Changeset)value; 106 switch(column) { 107 case 0: /* id */ renderId(cs); break; 108 case 1: /* upload comment */ renderUploadComment(cs); break; 109 case 2: /* open/closed */ renderOpen(cs); break; 110 case 3: /* user */ renderUser(cs); break; 111 case 4: /* created at */ renderDate(cs.getCreatedAt()); break; 112 case 5: /* closed at */ renderDate(cs.getClosedAt()); break; 113 } 114 return this; 115 } 116}