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