source: josm/trunk/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java @ 11848

Last change on this file since 11848 was 11848, checked in by Don-vip, 2 years ago

fix #14613 - Special HTML characters not escaped in GUI error messages

  • Property svn:eol-style set to native
File size: 2.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.text.DateFormat;
8
9import javax.swing.ImageIcon;
10import javax.swing.JLabel;
11import javax.swing.JList;
12import javax.swing.ListCellRenderer;
13import javax.swing.UIManager;
14
15import org.openstreetmap.josm.data.osm.Changeset;
16import org.openstreetmap.josm.tools.ImageProvider;
17import org.openstreetmap.josm.tools.Utils;
18import org.openstreetmap.josm.tools.date.DateUtils;
19
20/**
21 * A {@link ListCellRenderer} for the list of changesets in the upload dialog.
22 *
23 * @since 2115
24 */
25public class ChangesetCellRenderer extends JLabel implements ListCellRenderer<Changeset> {
26    private final ImageIcon icon;
27
28    /**
29     * Constructs a new {@code ChangesetCellRenderer}.
30     */
31    public ChangesetCellRenderer() {
32        icon = ImageProvider.get("data", "changeset");
33        setOpaque(true);
34    }
35
36    protected String buildToolTipText(Changeset cs) {
37        StringBuilder sb = new StringBuilder(64);
38        sb.append("<html><strong>").append(tr("Changeset id:")).append("</strong>").append(cs.getId()).append("<br>");
39        if (cs.getCreatedAt() != null) {
40            sb.append("<strong>").append(tr("Created at:")).append("</strong>").append(
41                    DateUtils.formatDateTime(cs.getCreatedAt(), DateFormat.SHORT, DateFormat.SHORT)).append("<br>");
42        }
43        String comment = cs.get("comment");
44        if (comment != null) {
45            sb.append("<strong>").append(tr("Changeset comment:")).append("</strong>")
46              .append(Utils.escapeReservedCharactersHTML(comment)).append("<br>");
47        }
48        return sb.toString();
49    }
50
51    @Override
52    public Component getListCellRendererComponent(JList<? extends Changeset> list, Changeset cs, int index, boolean isSelected,
53            boolean cellHasFocus) {
54        if (isSelected) {
55            setForeground(UIManager.getColor("List.selectionForeground"));
56            setBackground(UIManager.getColor("List.selectionBackground"));
57        } else {
58            setForeground(UIManager.getColor("List.foreground"));
59            setBackground(UIManager.getColor("List.background"));
60        }
61        if (cs != null) {
62            setIcon(icon);
63            StringBuilder sb = new StringBuilder();
64            String comment = cs.get("comment");
65            if (comment != null) {
66                sb.append(cs.getId()).append(" - ").append(comment);
67            } else if (cs.get("name") != null) {
68                sb.append(cs.getId()).append(" - ").append(cs.get("name"));
69            } else {
70                sb.append(tr("Changeset {0}", cs.getId()));
71            }
72            setText(sb.toString());
73            setToolTipText(buildToolTipText(cs));
74        } else {
75            setText(tr("No open changeset"));
76        }
77        return this;
78    }
79}
Note: See TracBrowser for help on using the repository browser.