001 // License: GPL. See LICENSE file for details. 002 package org.openstreetmap.josm.data.validation.util; 003 004 import static org.openstreetmap.josm.tools.I18n.trn; 005 006 import javax.swing.Icon; 007 import javax.swing.JLabel; 008 009 import org.openstreetmap.josm.data.osm.Node; 010 import org.openstreetmap.josm.data.osm.Relation; 011 import org.openstreetmap.josm.data.osm.Way; 012 import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor; 013 import org.openstreetmap.josm.gui.DefaultNameFormatter; 014 import org.openstreetmap.josm.tools.ImageProvider; 015 016 /** 017 * Able to create a name and an icon for each data element. 018 * 019 * @author imi 020 */ 021 //TODO This class used to be in JOSM but it was removed. MultipleNameVisitor depends on it so I copied it here, but MultipleNameVisitor should be refactored instead of using this class 022 public class NameVisitor extends AbstractVisitor { 023 024 /** 025 * The name of the item class 026 */ 027 public String className; 028 public String classNamePlural; 029 /** 030 * The name of this item. 031 */ 032 public String name; 033 /** 034 * The icon of this item. 035 */ 036 public Icon icon; 037 038 /** 039 * If the node has a name-key or id-key, this is displayed. If not, (lat,lon) 040 * is displayed. 041 */ 042 @Override 043 public void visit(Node n) { 044 name = n.getDisplayName(DefaultNameFormatter.getInstance()); 045 icon = ImageProvider.get("data", "node"); 046 className = "node"; 047 classNamePlural = trn("node", "nodes", 2); 048 } 049 050 /** 051 * If the way has a name-key or id-key, this is displayed. If not, (x nodes) 052 * is displayed with x being the number of nodes in the way. 053 */ 054 @Override 055 public void visit(Way w) { 056 name = w.getDisplayName(DefaultNameFormatter.getInstance()); 057 icon = ImageProvider.get("data", "way"); 058 className = "way"; 059 classNamePlural = trn("way", "ways", 2); 060 } 061 062 /** 063 */ 064 @Override 065 public void visit(Relation e) { 066 name = e.getDisplayName(DefaultNameFormatter.getInstance()); 067 icon = ImageProvider.get("data", "relation"); 068 className = "relation"; 069 classNamePlural = trn("relation", "relations", 2); 070 } 071 072 public JLabel toLabel() { 073 return new JLabel(name, icon, JLabel.HORIZONTAL); 074 } 075 }