// License: GPL. For details, see LICENSE file. package org.wikipedia.actions; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Locale; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.JosmAction; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog; import org.wikipedia.WikipediaApp; import org.wikipedia.data.WikipediaEntry; public class WikipediaAddNamesAction extends JosmAction { public WikipediaAddNamesAction() { super(tr("Add names from Wikipedia"), "dialogs/wikipedia", tr("Fetches interwiki links from Wikipedia in order to add several name tags"), null, true); } @Override public void actionPerformed(ActionEvent e) { final WikipediaEntry wp = WikipediaEntry.parseTag("wikipedia", getWikipediaValue()); List<String[]> tags = new ArrayList<>(); WikipediaApp.forLanguage(wp.lang).getInterwikiArticles(wp.article).stream() .filter(this::useWikipediaLangArticle) .map(i -> new String[]{"name:" + i.lang, i.article}) .forEach(tags::add); if (Main.isDebugEnabled()) { Main.debug(tags.toString()); } AddTagsDialog.addTags(tags.toArray(new String[tags.size()][]), "Wikipedia", getLayerManager().getEditDataSet().getSelected()); } private boolean useWikipediaLangArticle(WikipediaEntry i) { return (!Main.pref.getBoolean("wikipedia.filter-iso-languages", true) || Arrays.asList(Locale.getISOLanguages()).contains(i.lang)) && (!Main.pref.getBoolean("wikipedia.filter-same-names", true) || !i.article.equals(getLayerManager().getEditDataSet().getSelected().iterator().next().get("name"))); } private String getWikipediaValue() { DataSet ds = getLayerManager().getEditDataSet(); if (ds == null || ds.getSelected() == null || ds.getSelected().size() != 1) { return null; } else { return ds.getSelected().iterator().next().get("wikipedia"); } } @Override protected void updateEnabledState() { setEnabled(getWikipediaValue() != null); } @Override protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) { updateEnabledState(); } }