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