// License: GPL. For details, see LICENSE file. package org.wikipedia.data; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.Tag; import org.openstreetmap.josm.tools.AlphanumComparator; import org.openstreetmap.josm.tools.CheckParameterUtil; import org.openstreetmap.josm.tools.Utils; import org.wikipedia.WikipediaApp; import java.util.Comparator; import java.util.Optional; public class WikidataEntry extends WikipediaEntry { public final String label; public final String description; public WikidataEntry(String id, String label, LatLon coordinate, String description) { super("wikidata", id, coordinate); this.label = label; this.description = description; ensureValidWikidataId(id); } @Override public Tag createWikipediaTag() { return new Tag("wikidata", article); } @Override public String getLabelText() { final String descriptionInParen = description == null ? "" : (" (" + description + ")"); return getLabelText(label, article + descriptionInParen); } public static String getLabelText(String bold, String gray) { return Utils.escapeReservedCharactersHTML(bold) + " <span color='gray'>" + Utils.escapeReservedCharactersHTML(gray) + "</span>"; } @Override public String getSearchText() { return Optional.ofNullable(label).orElse(article); } private static void ensureValidWikidataId(String id) { CheckParameterUtil.ensureThat(WikipediaApp.WIKIDATA_PATTERN.matcher(id).matches(), "Invalid Wikidata ID given: " + id); } @Override public int compareTo(WikipediaEntry o) { if (o instanceof WikidataEntry) { return Comparator .<WikidataEntry, String>comparing(x -> x.label, AlphanumComparator.getInstance()) .thenComparing(x -> x.article, AlphanumComparator.getInstance()) .compare(this, ((WikidataEntry) o)); } else { return super.compareTo(o); } } }