Ignore:
Timestamp:
2016-07-08T19:58:24+02:00 (8 years ago)
Author:
simon04
Message:

JOSM/wikipedia: fewer Wikidata API calls – #josm13122

File:
1 edited

Legend:

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

    r32610 r32611  
    8484            final XPathExpression xpathLon = X_PATH.compile("@lon");
    8585            try (final InputStream in = HttpClient.create(new URL(url)).setReasonForRequest("Wikipedia").connect().getContent()) {
    86                 Document doc = DOCUMENT_BUILDER.parse(in);
    87                 NodeList nodes = (NodeList) xpathPlacemark.evaluate(doc, XPathConstants.NODESET);
    88                 // construct WikipediaEntry for each XML element
    89                 List<WikipediaEntry> entries = new ArrayList<>(nodes.getLength());
     86                final Document doc = DOCUMENT_BUILDER.parse(in);
     87                final NodeList nodes = (NodeList) xpathPlacemark.evaluate(doc, XPathConstants.NODESET);
     88                final List<String> names = new ArrayList<>(nodes.getLength());
     89                final List<WikipediaEntry> entries = new ArrayList<>(nodes.getLength());
    9090                for (int i = 0; i < nodes.getLength(); i++) {
    9191                    final Node node = nodes.item(i);
    9292                    final String name = xpathName.evaluate(node);
     93                    names.add(name);
    9394                    final LatLon latLon = new LatLon((
    9495                            (double) xpathLat.evaluate(node, XPathConstants.NUMBER)),
    9596                            (double) xpathLon.evaluate(node, XPathConstants.NUMBER));
    9697                    if ("wikidata".equals(wikipediaLang)) {
    97                         entries.add(new WikidataEntry(name, latLon, getLabelForWikidata(name, Locale.getDefault())));
     98                        entries.add(new WikidataEntry(name, latLon, null));
    9899                    } else {
    99100                        entries.add(new WikipediaEntry(name, wikipediaLang, name, latLon
     
    101102                    }
    102103                }
    103                 return entries;
     104                if ("wikidata".equals(wikipediaLang)) {
     105                    final Map<String, String> labels = getLabelForWikidata(names, Locale.getDefault());
     106                    final List<WikipediaEntry> entriesWithLabel = new ArrayList<>(nodes.getLength());
     107                    for (WikipediaEntry entry : entries) {
     108                        entriesWithLabel.add(new WikidataEntry(entry.wikipediaArticle, entry.coordinate, labels.get(entry.wikipediaArticle)));
     109                    }
     110                    return entriesWithLabel;
     111                } else {
     112                    return entries;
     113                }
    104114            }
    105115        } catch (Exception ex) {
Note: See TracChangeset for help on using the changeset viewer.