001// License: GPL. See LICENSE file for details.
002package org.openstreetmap.josm.gui.dialogs.validator;
003
004import java.awt.Component;
005
006import javax.swing.JTree;
007import javax.swing.tree.DefaultMutableTreeNode;
008import javax.swing.tree.DefaultTreeCellRenderer;
009
010import org.openstreetmap.josm.data.validation.Severity;
011import org.openstreetmap.josm.data.validation.TestError;
012import org.openstreetmap.josm.data.validation.util.MultipleNameVisitor;
013import org.openstreetmap.josm.tools.ImageProvider;
014
015/**
016 * Tree renderer for displaying errors
017 * @author frsantos
018 */
019public class ValidatorTreeRenderer extends DefaultTreeCellRenderer
020{
021    /** Serializable ID */
022    private static final long serialVersionUID = 5567632718124640198L;
023
024    @Override
025    public Component getTreeCellRendererComponent(JTree tree, Object value,
026            boolean selected, boolean expanded, boolean leaf, int row,
027            boolean hasFocus) {
028        super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
029
030        DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
031        Object nodeInfo = node.getUserObject();
032
033        if (nodeInfo instanceof Severity) {
034            Severity s = (Severity) nodeInfo;
035            setIcon(ImageProvider.get("data", s.getIcon()));
036        } else if (nodeInfo instanceof TestError) {
037            TestError error = (TestError) nodeInfo;
038            MultipleNameVisitor v = new MultipleNameVisitor();
039            v.visit(error.getPrimitives());
040            setText(v.getText());
041            setIcon(v.getIcon());
042        }
043        return this;
044    }
045}