// License: GPL. For details, see LICENSE file. package relcontext; import javax.swing.JLabel; import org.openstreetmap.josm.data.osm.Relation; /** * Renderer for chosen relation. * [Icon] na=wood U * key is 2-letter; type = icon; to the right — symbol of relation topology (closed, lines, broken). * * @author Zverik */ public class ChosenRelationComponent extends JLabel implements ChosenRelationListener { public ChosenRelationComponent(ChosenRelation rel) { super(""); rel.addChosenRelationListener(this); } @Override public void chosenRelationChanged(Relation oldRelation, Relation newRelation) { setText(prepareText(newRelation)); repaint(); } private static final String[] TYPE_KEYS = new String[] { "natural", "landuse", "place", "waterway", "leisure", "amenity", "restriction", "public_transport", "route", "enforcement" }; private static final String[] NAMING_TAGS = new String[] { "name", "place_name", "ref", "destination", "note" }; protected String prepareText(Relation rel) { if (rel == null) return ""; String type = rel.get("type"); if (type == null || type.length() == 0) { type = "-"; } String tag = null; for (int i = 0; i < TYPE_KEYS.length && tag == null; i++) { if (rel.hasKey(TYPE_KEYS[i])) { tag = TYPE_KEYS[i]; } } if (tag != null) { tag = tag.substring(0, 2) + "=" + rel.get(tag); } String name = null; for (int i = 0; i < NAMING_TAGS.length && name == null; i++) { if (rel.hasKey(NAMING_TAGS[i])) { name = rel.get(NAMING_TAGS[i]); } } StringBuilder sb = new StringBuilder(); sb.append(type.substring(0, 1)); if (type.equals("boundary") && rel.hasKey("admin_level")) { sb.append(rel.get("admin_level")); } if (name != null) { sb.append(" \"").append(name).append('"'); } if (tag != null) { sb.append("; ").append(tag); } sb.append(" (").append(rel.getMembersCount()).append(')'); return sb.toString(); } }