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 }