001    // License: GPL. See LICENSE file for details.
002    package org.openstreetmap.josm.gui.dialogs.validator;
003    
004    import java.awt.Component;
005    
006    import javax.swing.JTree;
007    import javax.swing.tree.DefaultMutableTreeNode;
008    import javax.swing.tree.DefaultTreeCellRenderer;
009    
010    import org.openstreetmap.josm.data.validation.Severity;
011    import org.openstreetmap.josm.data.validation.TestError;
012    import org.openstreetmap.josm.data.validation.util.MultipleNameVisitor;
013    import org.openstreetmap.josm.tools.ImageProvider;
014    
015    /**
016     * Tree renderer for displaying errors
017     * @author frsantos
018     */
019    public 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    }