Ignore:
Timestamp:
2016-07-17T19:01:53+02:00 (8 years ago)
Author:
simon04
Message:

JOSM/wikipedia: add prefix search for categories

Location:
applications/editors/josm/plugins/wikipedia
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikidataItemSearchDialog.java

    r32634 r32670  
    1111import java.util.Collection;
    1212import java.util.Collections;
    13 import java.util.HashSet;
    1413import java.util.List;
    1514import java.util.Locale;
    1615import java.util.TreeSet;
    17 import java.util.concurrent.Executors;
    1816import java.util.concurrent.TimeUnit;
    1917
     
    3129import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
    3230import org.openstreetmap.josm.gui.util.GuiHelper;
    33 import org.openstreetmap.josm.gui.widgets.SearchTextResultListPanel;
    3431import org.openstreetmap.josm.tools.GBC;
    3532import org.openstreetmap.josm.tools.Predicate;
     
    120117    }
    121118
    122     private static class Selector extends SearchTextResultListPanel<WikipediaApp.WikidataEntry> {
    123 
    124         final Debouncer debouncer = new Debouncer(
    125                 Executors.newSingleThreadScheduledExecutor(Utils.newThreadFactory("wikidata-search-%d", Thread.NORM_PRIORITY)));
     119    private static class Selector extends WikiSearchTextResultListPanel<WikipediaApp.WikidataEntry> {
    126120
    127121        Selector() {
     
    135129                }
    136130            });
    137         }
    138 
    139         public WikipediaApp.WikidataEntry getSelectedItem() {
    140             final WikipediaApp.WikidataEntry selected = lsResult.getSelectedValue();
    141             if (selected != null) {
    142                 return selected;
    143             } else if (!lsResultModel.isEmpty()) {
    144                 return lsResultModel.getElementAt(0);
    145             } else {
    146                 return null;
    147             }
    148131        }
    149132
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java

    r32654 r32670  
    264264            }
    265265            return r;
     266        } catch (Exception ex) {
     267            throw new RuntimeException(ex);
     268        }
     269    }
     270
     271    static List<String> getCategoriesForPrefix(final String wikipediaLang, final String prefix) {
     272        try {
     273            final String url = getSiteUrl(wikipediaLang) + "/w/api.php"
     274                    + "?action=query"
     275                    + "&list=prefixsearch"
     276                    + "&format=xml"
     277                    + "&psnamespace=14"
     278                    + "&pslimit=50"
     279                    + "&pssearch=" + Utils.encodeUrl(prefix);
     280            // parse XML document
     281            try (final InputStream in = HttpClient.create(new URL(url)).setReasonForRequest("Wikipedia").connect().getContent()) {
     282                final Document doc = DOCUMENT_BUILDER.parse(in);
     283                final NodeList nodes = (NodeList) X_PATH.compile("//ps/@title").evaluate(doc, XPathConstants.NODESET);
     284                final List<String> categories = new ArrayList<>(nodes.getLength());
     285                for (int i = 0; i < nodes.getLength(); i++) {
     286                    final Node node = nodes.item(i);
     287                    final String value = node.getNodeValue();
     288                    categories.add(value.contains(":") ? value.split(":", 2)[1] : value);
     289                }
     290                return categories;
     291            }
    266292        } catch (Exception ex) {
    267293            throw new RuntimeException(ex);
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java

    r32625 r32670  
    205205        @Override
    206206        public void actionPerformed(ActionEvent e) {
    207             final String category = JOptionPane.showInputDialog(
    208                     Main.parent,
    209                     tr("Enter the Wikipedia category"));
     207            final WikipediaCategorySearchDialog categorySearchDialog = WikipediaCategorySearchDialog.getInstance();
     208            categorySearchDialog.showDialog();
     209            if (categorySearchDialog.getValue() != 1) {
     210                return;
     211            }
     212            final String category = categorySearchDialog.getCategory();
    210213            if (category == null) {
    211214                return;
  • applications/editors/josm/plugins/wikipedia/test/unit/org/wikipedia/WikipediaAppTest.java

    r32626 r32670  
    66import org.openstreetmap.josm.data.coor.LatLon;
    77import org.openstreetmap.josm.tools.Predicate;
     8import org.openstreetmap.josm.tools.Predicates;
    89import org.openstreetmap.josm.tools.Utils;
    910import org.wikipedia.WikipediaApp.WikipediaEntry;
     
    214215        assertThat(entry3.getWiwosmStatus(), is(false));
    215216    }
     217
     218    @Test
     219    public void testCategoriesForPrefix() throws Exception {
     220        final List<String> categories = WikipediaApp.getCategoriesForPrefix("de", "Gemeinde in Öster");
     221        assertTrue(Utils.exists(categories, Predicates.equalTo("Gemeinde in Österreich")));
     222    }
    216223}
Note: See TracChangeset for help on using the changeset viewer.