Changeset 33075 in osm for applications/editors


Ignore:
Timestamp:
2016-11-18T20:00:49+01:00 (8 years ago)
Author:
simon04
Message:

JOSM/wikipedia: Refactoring (wikipediaLang as field)

Location:
applications/editors/josm/plugins/wikipedia
Files:
7 edited

Legend:

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

    r33074 r33075  
    4444    public static final Pattern WIKIDATA_PATTERN = Pattern.compile("Q\\d+");
    4545    private static final XPath X_PATH = XPath.getInstance();
    46 
    47     private WikipediaApp() {
     46    private final String wikipediaLang;
     47
     48    private WikipediaApp(final String wikipediaLang) {
     49        this.wikipediaLang = wikipediaLang;
     50    }
     51
     52    public static WikipediaApp forLanguage(final String wikipediaLang) {
     53        return new WikipediaApp(wikipediaLang);
    4854    }
    4955
     
    5662    }
    5763
    58     public static String getSiteUrl(String wikipediaLang) {
     64    public String getSiteUrl() {
    5965        if ("wikidata".equals(wikipediaLang)) {
    6066            return "https://www.wikidata.org";
     
    6470    }
    6571
    66     public static List<WikipediaEntry> getEntriesFromCoordinates(String wikipediaLang, LatLon min, LatLon max) {
     72    public List<WikipediaEntry> getEntriesFromCoordinates(LatLon min, LatLon max) {
    6773        try {
    6874            // construct url
    69             final String url = getSiteUrl(wikipediaLang) + "/w/api.php"
     75            final String url = getSiteUrl() + "/w/api.php"
    7076                    + "?action=query"
    7177                    + "&list=geosearch"
     
    120126    }
    121127
    122     public static List<WikipediaEntry> getEntriesFromCategory(String wikipediaLang, String category, int depth) {
     128    public List<WikipediaEntry> getEntriesFromCategory(String category, int depth) {
    123129        try {
    124130            final String url = "https://tools.wmflabs.org/cats-php/"
     
    145151    }
    146152
    147     public static void updateWIWOSMStatus(String wikipediaLang, List<WikipediaEntry> entries) {
     153    public void updateWIWOSMStatus(List<WikipediaEntry> entries) {
    148154        if (entries.size() > 20) {
    149             partitionList(entries, 20).forEach(chunk -> updateWIWOSMStatus(wikipediaLang, chunk));
     155            partitionList(entries, 20).forEach(chunk -> updateWIWOSMStatus(chunk));
    150156            return;
    151157        }
     
    179185    }
    180186
    181     public static Stream<String> getWikipediaArticles(final String wikipediaLang, OsmPrimitive p) {
     187    public Stream<String> getWikipediaArticles(final OsmPrimitive p) {
    182188        if ("wikidata".equals(wikipediaLang)) {
    183189            return Stream.of(p.get("wikidata")).filter(Objects::nonNull);
     
    194200     * Returns a map mapping wikipedia articles to wikidata ids.
    195201     */
    196     public static Map<String, String> getWikidataForArticles(String wikipediaLang, List<String> articles) {
     202    public Map<String, String> getWikidataForArticles(Collection<String> articles) {
    197203        return articles.stream()
    198204                .distinct()
     
    216222                .values()
    217223                .stream()
    218                 .flatMap(chunk -> getWikidataForArticles0(wikipediaLang, chunk).entrySet().stream())
     224                .flatMap(chunk -> getWikidataForArticles0(chunk).entrySet().stream())
    219225                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
    220226    }
    221227
    222     private static Map<String, String> getWikidataForArticles0(String wikipediaLang, List<String> articles) {
     228    private Map<String, String> getWikidataForArticles0(List<String> articles) {
    223229        if (articles.isEmpty()) {
    224230            return Collections.emptyMap();
     
    249255    }
    250256
    251     public static List<String> getCategoriesForPrefix(final String wikipediaLang, final String prefix) {
    252         try {
    253             final String url = getSiteUrl(wikipediaLang) + "/w/api.php"
     257    public List<String> getCategoriesForPrefix(final String prefix) {
     258        try {
     259            final String url = getSiteUrl() + "/w/api.php"
    254260                    + "?action=query"
    255261                    + "&list=prefixsearch"
     
    334340    }
    335341
    336     public static Collection<WikipediaEntry> getInterwikiArticles(String wikipediaLang, String article) {
    337         try {
    338             final String url = getSiteUrl(wikipediaLang) + "/w/api.php" +
     342    public Collection<WikipediaEntry> getInterwikiArticles(String article) {
     343        try {
     344            final String url = getSiteUrl() + "/w/api.php" +
    339345                    "?action=query" +
    340346                    "&prop=langlinks" +
     
    356362    }
    357363
    358     public static LatLon getCoordinateForArticle(String wikipediaLang, String article) {
    359         try {
    360             final String url = getSiteUrl(wikipediaLang) + "/w/api.php" +
     364    public LatLon getCoordinateForArticle(String article) {
     365        try {
     366            final String url = getSiteUrl() + "/w/api.php" +
    361367                    "?action=query" +
    362368                    "&prop=coordinates" +
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/FetchWikidataAction.java

    r32891 r33075  
    129129                    "Fetching {0} Wikidata ID for language ''{1}''",
    130130                    "Fetching {0} Wikidata IDs for language ''{1}''", size, size, lang));
    131             final Map<String, String> wikidataByWikipedia = WikipediaApp.getWikidataForArticles(lang, new ArrayList<>(byArticle.keySet()));
     131            final Map<String, String> wikidataByWikipedia = WikipediaApp.forLanguage(lang).getWikidataForArticles(byArticle.keySet());
    132132            ConditionalOptionPaneUtil.startBulkOperation(GuiUtils.PREF_OVERWRITE);
    133133            for (Map.Entry<String, Set<OsmPrimitive>> i : byArticle.entrySet()) {
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/WikipediaAddNamesAction.java

    r32891 r33075  
    3131        final WikipediaEntry wp = WikipediaEntry.parseTag("wikipedia", getWikipediaValue());
    3232        List<String[]> tags = new ArrayList<>();
    33         WikipediaApp.getInterwikiArticles(wp.lang, wp.article).stream()
     33        WikipediaApp.forLanguage(wp.lang).getInterwikiArticles(wp.article).stream()
    3434                .filter(this::useWikipediaLangArticle)
    3535                .map(i -> new String[]{"name:" + i.lang, i.article})
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/data/WikipediaEntry.java

    r32892 r33075  
    8080
    8181    public String getBrowserUrl() {
    82         return WikipediaApp.getSiteUrl(lang) + "/wiki/" + Utils.encodeUrl(article.replace(" ", "_"));
     82        return WikipediaApp.forLanguage(lang).getSiteUrl() + "/wiki/" + Utils.encodeUrl(article.replace(" ", "_"));
    8383    }
    8484
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaCategorySearchDialog.java

    r32887 r33075  
    5858                final List<String> entries = query == null || query.isEmpty()
    5959                        ? Collections.emptyList()
    60                         : WikipediaApp.getCategoriesForPrefix(WikipediaToggleDialog.wikipediaLang.get(), query);
     60                        : WikipediaApp.forLanguage(WikipediaToggleDialog.wikipediaLang.get()).getCategoriesForPrefix(query);
    6161                GuiHelper.runInEDT(() -> lsResultModel.setItems(entries));
    6262            }, 200, TimeUnit.MILLISECONDS);
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaToggleDialog.java

    r33017 r33075  
    113113    private void updateTitle() {
    114114        final String lang = getLanguageOfFirstItem();
    115         final String host = WikipediaApp.getSiteUrl(lang).split("/+")[1];
     115        final String host = WikipediaApp.forLanguage(lang).getSiteUrl().split("/+")[1];
    116116        if (titleContext == null) {
    117117            setTitle(host);
     
    155155                    @Override
    156156                    List<WikipediaEntry> getEntries() {
    157                         return WikipediaApp.getEntriesFromCoordinates(
    158                                 wikidata ? "wikidata" : wikipediaLang.get(), min, max);
     157                        return WikipediaApp.forLanguage(wikidata ? "wikidata" : wikipediaLang.get())
     158                                .getEntriesFromCoordinates(min, max);
    159159                    }
    160160                }.execute();
     
    175175            publish(entries.toArray(new WikipediaEntry[entries.size()]));
    176176            WikipediaApp.partitionList(entries, 20).forEach(chunk -> {
    177                 WikipediaApp.updateWIWOSMStatus(chunk.get(0).lang, chunk);
     177                WikipediaApp.forLanguage(chunk.get(0).lang).updateWIWOSMStatus(chunk);
    178178                list.repaint();
    179179            });
     
    217217                @Override
    218218                List<WikipediaEntry> getEntries() {
    219                     return WikipediaApp.getEntriesFromCategory(
    220                             wikipediaLang.get(), category, Main.pref.getInteger("wikipedia.depth", 3));
     219                    return WikipediaApp.forLanguage(wikipediaLang.get())
     220                            .getEntriesFromCategory(category, Main.pref.getInteger("wikipedia.depth", 3));
    221221                }
    222222            }.execute();
     
    341341            final LatLon latLon = entry.coordinate != null
    342342                    ? entry.coordinate
    343                     : WikipediaApp.getCoordinateForArticle(entry.lang, entry.article);
     343                    : WikipediaApp.forLanguage(entry.lang).getCoordinateForArticle(entry.article);
    344344            if (latLon == null) {
    345345                return;
     
    354354        if (Main.main != null && Main.getLayerManager().getEditDataSet() != null) {
    355355            Main.getLayerManager().getEditDataSet().allPrimitives().stream()
    356                     .flatMap(p -> WikipediaApp.getWikipediaArticles(language, p))
     356                    .flatMap(p -> WikipediaApp.forLanguage(language).getWikipediaArticles(p))
    357357                    .forEach(articles::add);
    358358        }
  • applications/editors/josm/plugins/wikipedia/test/unit/org/wikipedia/WikipediaAppTest.java

    r33070 r33075  
    5555    @Test
    5656    public void testGetInterwikiArticles1() {
    57         final Collection<WikipediaEntry> iw = WikipediaApp.getInterwikiArticles("de", "Österreich");
     57        final Collection<WikipediaEntry> iw = WikipediaApp.forLanguage("de").getInterwikiArticles("Österreich");
    5858        assertThat(iw, hasItem(new WikipediaEntry("en", "Austria")));
    5959        assertThat(iw, hasItem(new WikipediaEntry("no", "Østerrike")));
     
    6363    @Test
    6464    public void testGetInterwikiArticles2() {
    65         final Collection<WikipediaEntry> iw = WikipediaApp.getInterwikiArticles("en", "Ampersand");
     65        final Collection<WikipediaEntry> iw = WikipediaApp.forLanguage("en").getInterwikiArticles("Ampersand");
    6666        assertThat(iw, hasItem(new WikipediaEntry("fi", "&")));
    6767    }
     
    6969    @Test
    7070    public void testGetCoordinates() throws Exception {
    71         assertThat(WikipediaApp.getCoordinateForArticle("de", "Marchreisenspitze"), is(new LatLon(47.1725, 11.30833333)));
    72         assertThat(WikipediaApp.getCoordinateForArticle("en", "Austria"), is(new LatLon(47.33333333, 13.33333333)));
    73         assertThat(WikipediaApp.getCoordinateForArticle("en", "Foobar2000"), nullValue());
     71        assertThat(WikipediaApp.forLanguage("de").getCoordinateForArticle("Marchreisenspitze"), is(new LatLon(47.1725, 11.30833333)));
     72        assertThat(WikipediaApp.forLanguage("en").getCoordinateForArticle("Austria"), is(new LatLon(47.33333333, 13.33333333)));
     73        assertThat(WikipediaApp.forLanguage("en").getCoordinateForArticle("Foobar2000"), nullValue());
    7474    }
    7575
    7676    @Test
    7777    public void testFromCoordinates() throws Exception {
    78         final List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCoordinates("de",
    79                 new LatLon(52.5179786, 13.3753321), new LatLon(52.5192215, 13.3768705));
     78        final List<WikipediaEntry> entries = WikipediaApp.forLanguage("de")
     79                .getEntriesFromCoordinates(new LatLon(52.5179786, 13.3753321), new LatLon(52.5192215, 13.3768705));
    8080        final long c = entries.stream()
    8181                .filter(entry -> "Reichstagsgebäude".equals(entry.article) && "de".equals(entry.lang))
     
    9898    @Test
    9999    public void testFromCoordinatesWikidata() throws Exception {
    100         final List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCoordinates("wikidata",
    101                 new LatLon(47.20, 11.30), new LatLon(47.22, 11.32));
     100        final List<WikipediaEntry> entries = WikipediaApp.forLanguage("wikidata")
     101                .getEntriesFromCoordinates(new LatLon(47.20, 11.30), new LatLon(47.22, 11.32));
    102102        final long c = entries.stream()
    103103                .map(WikidataEntry.class::cast)
     
    109109    @Test
    110110    public void testGetWikidataForArticles() throws Exception {
    111         final Map<String, String> map = WikipediaApp.getWikidataForArticles("en",
    112                 Arrays.asList("London", "Vienna", "Völs, Tyrol", "a-non-existing-article"));
     111        final Map<String, String> map = WikipediaApp.forLanguage("en")
     112                .getWikidataForArticles(Arrays.asList("London", "Vienna", "Völs, Tyrol", "a-non-existing-article"));
    113113        assertThat(map.get("London"), is("Q84"));
    114114        assertThat(map.get("Vienna"), is("Q1741"));
     
    120120    @Test
    121121    public void testTicket13991() throws Exception {
    122         final Map<String, String> map = WikipediaApp.getWikidataForArticles("en",
    123                 Stream.iterate("London", x -> x).limit(100).collect(Collectors.toList()));
     122        final Map<String, String> map = WikipediaApp.forLanguage("en")
     123                .getWikidataForArticles(Stream.iterate("London", x -> x).limit(100).collect(Collectors.toList()));
    124124        assertThat(map, is(Collections.singletonMap("London", "Q84")));
    125125        final List<String> articles = IntStream.range(0, 200)
    126126                .mapToObj(i -> "a-non-existing-article-" + i)
    127127                .collect(Collectors.toList());
    128         assertTrue(WikipediaApp.getWikidataForArticles("en", articles).isEmpty());
     128        assertTrue(WikipediaApp.forLanguage("en").getWikidataForArticles(articles).isEmpty());
    129129    }
    130130
     
    154154        final WikipediaEntry entry2 = new WikipediaEntry("en", "London");
    155155        final WikipediaEntry entry3 = new WikipediaEntry("en", "a-non-existing-article");
    156         WikipediaApp.updateWIWOSMStatus("en", Arrays.asList(entry1, entry2, entry3));
     156        WikipediaApp.forLanguage("en").updateWIWOSMStatus(Arrays.asList(entry1, entry2, entry3));
    157157        assertThat(entry1.getWiwosmStatus(), is(true));
    158158        assertThat(entry2.getWiwosmStatus(), is(true));
     
    162162    @Test
    163163    public void testCategoriesForPrefix() throws Exception {
    164         final List<String> categories = WikipediaApp.getCategoriesForPrefix("de", "Gemeinde in Öster");
     164        final List<String> categories = WikipediaApp.forLanguage("de").getCategoriesForPrefix("Gemeinde in Öster");
    165165        assertTrue(categories.contains("Gemeinde in Österreich"));
    166166    }
Note: See TracChangeset for help on using the changeset viewer.