Ignore:
Timestamp:
2016-08-30T13:26:57+02:00 (8 years ago)
Author:
simon04
Message:

JOSM/wikipedia: refactoring (merge WikipediaLangArticle into WikipediaEntry)

Location:
applications/editors/josm/plugins/wikipedia/src/org/wikipedia
Files:
1 deleted
6 edited

Legend:

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

    r32888 r32891  
    3636import org.wikipedia.data.WikidataEntry;
    3737import org.wikipedia.data.WikipediaEntry;
    38 import org.wikipedia.data.WikipediaLangArticle;
    3938import org.wikipedia.tools.XPath;
    4039
     
    153152            final String url = "https://tools.wmflabs.org/wiwosm/osmjson/getGeoJSON.php?action=check&lang=" + wikipediaLang;
    154153            try {
    155                 final String articles = entries.stream().map(i -> i.wikipediaArticle).collect(Collectors.joining(","));
     154                final String articles = entries.stream().map(i -> i.article).collect(Collectors.joining(","));
    156155                final String requestBody = "articles=" + Utils.encodeUrl(articles);
    157156                try (final BufferedReader reader = HttpClient.create(new URL(url), "POST").setReasonForRequest("Wikipedia")
     
    174173        }
    175174        for (WikipediaEntry i : entries) {
    176             i.setWiwosmStatus(status.get(i.wikipediaArticle));
     175            i.setWiwosmStatus(status.get(i.article));
    177176        }
    178177    }
     
    184183        return Stream
    185184                .of("wikipedia", "wikipedia:" + wikipediaLang)
    186                 .map(key -> WikipediaLangArticle.parseTag(key, p.get(key)))
     185                .map(key -> WikipediaEntry.parseTag(key, p.get(key)))
    187186                .filter(Objects::nonNull)
    188187                .filter(wp -> wikipediaLang.equals(wp.lang))
     
    267266                    "?action=wbgetentities" +
    268267                    "&props=labels|descriptions" +
    269                     "&ids=" + entries.stream().map(x -> x.wikipediaArticle).collect(Collectors.joining("|")) +
     268                    "&ids=" + entries.stream().map(x -> x.article).collect(Collectors.joining("|")) +
    270269                    "&format=xml";
    271270            final Collection<String> languages = new ArrayList<>();
     
    281280                final Document xml = newDocumentBuilder().parse(in);
    282281                for (final WikipediaEntry entry : entries) {
    283                     final Node entity = X_PATH.evaluateNode("//entity[@id='" + entry.wikipediaArticle + "']", xml);
     282                    final Node entity = X_PATH.evaluateNode("//entity[@id='" + entry.article + "']", xml);
    284283                    if (entity == null) {
    285284                        continue;
    286285                    }
    287286                    r.add(new WikidataEntry(
    288                             entry.wikipediaArticle,
     287                            entry.article,
    289288                            getFirstField(languages, "label", entity),
    290289                            entry.coordinate,
     
    309308    }
    310309
    311     public static Collection<WikipediaLangArticle> getInterwikiArticles(String wikipediaLang, String article) {
     310    public static Collection<WikipediaEntry> getInterwikiArticles(String wikipediaLang, String article) {
    312311        try {
    313312            final String url = getSiteUrl(wikipediaLang) + "/w/api.php" +
     
    323322                            final String lang = X_PATH.evaluateString("@lang", node);
    324323                            final String name = node.getTextContent();
    325                             return new WikipediaLangArticle(lang, name);
     324                            return new WikipediaEntry(lang, name);
    326325                        }).collect(Collectors.toList());
    327326            }
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/FetchWikidataAction.java

    r32888 r32891  
    2929import org.openstreetmap.josm.tools.Utils;
    3030import org.wikipedia.WikipediaApp;
    31 import org.wikipedia.data.WikipediaLangArticle;
     31import org.wikipedia.data.WikipediaEntry;
    3232import org.wikipedia.gui.GuiUtils;
    3333
     
    5252        private boolean canceled = false;
    5353        private final List<Command> commands = new ArrayList<>();
    54         private final Collection<WikipediaLangArticle> notFound = new ArrayList<>();
     54        private final Collection<WikipediaEntry> notFound = new ArrayList<>();
    5555
    5656        public Fetcher(Collection<? extends OsmPrimitive> selection) {
     
    8585            final Map<String, PrimitivesWithWikipedia> r = new HashMap<>();
    8686            for (final OsmPrimitive i : selection) {
    87                 final WikipediaLangArticle tag = WikipediaLangArticle.parseTag("wikipedia", i.get("wikipedia"));
     87                final WikipediaEntry tag = WikipediaEntry.parseTag("wikipedia", i.get("wikipedia"));
    8888                if (tag != null) {
    8989                    if (!r.containsKey(tag.lang)) {
     
    114114        final MultiMap<String, OsmPrimitive> byArticle = new MultiMap<>();
    115115        final List<Command> commands = new ArrayList<>();
    116         final List<WikipediaLangArticle> notFound = new ArrayList<>();
     116        final List<WikipediaEntry> notFound = new ArrayList<>();
    117117
    118118        PrimitivesWithWikipedia(String lang) {
     
    139139                    }
    140140                } else {
    141                     final WikipediaLangArticle article = new WikipediaLangArticle(lang, wikipedia);
     141                    final WikipediaEntry article = new WikipediaEntry(lang, wikipedia);
    142142                    Main.warn(tr("No Wikidata ID found for: {0}", article));
    143143                    notFound.add(article);
     
    154154        }
    155155
    156         List<WikipediaLangArticle> getNotFound() {
     156        List<WikipediaEntry> getNotFound() {
    157157            return notFound;
    158158        }
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/WikipediaAddNamesAction.java

    r32888 r32891  
    1717import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog;
    1818import org.wikipedia.WikipediaApp;
    19 import org.wikipedia.data.WikipediaLangArticle;
     19import org.wikipedia.data.WikipediaEntry;
    2020
    2121public class WikipediaAddNamesAction extends JosmAction {
     
    2929    @Override
    3030    public void actionPerformed(ActionEvent e) {
    31         final WikipediaLangArticle wp = WikipediaLangArticle.parseTag("wikipedia", getWikipediaValue());
     31        final WikipediaEntry wp = WikipediaEntry.parseTag("wikipedia", getWikipediaValue());
    3232        List<String[]> tags = new ArrayList<>();
    3333        WikipediaApp.getInterwikiArticles(wp.lang, wp.article).stream()
     
    4141    }
    4242
    43     private boolean useWikipediaLangArticle(WikipediaLangArticle i) {
     43    private boolean useWikipediaLangArticle(WikipediaEntry i) {
    4444        return (!Main.pref.getBoolean("wikipedia.filter-iso-languages", true)
    4545                || Arrays.asList(Locale.getISOLanguages()).contains(i.lang))
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/data/WikidataEntry.java

    r32888 r32891  
    2020    @Override
    2121    public Tag createWikipediaTag() {
    22         return new Tag("wikidata", wikipediaArticle);
     22        return new Tag("wikidata", article);
    2323    }
    2424
     
    2626    public String getLabelText() {
    2727        final String descriptionInParen = description == null ? "" : (" (" + description + ")");
    28         return getLabelText(label, wikipediaArticle + descriptionInParen);
     28        return getLabelText(label, article + descriptionInParen);
    2929    }
    3030
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/data/WikipediaEntry.java

    r32888 r32891  
    99
    1010import java.util.Comparator;
     11import java.util.Objects;
     12import java.util.regex.Matcher;
     13import java.util.regex.Pattern;
    1114
    1215public class WikipediaEntry implements Comparable<WikipediaEntry> {
    1316
     17    public final String lang;
     18    public final String article;
    1419    public final String label;
    15     public final String wikipediaLang, wikipediaArticle;
    1620    public final LatLon coordinate;
    1721    private Boolean wiwosmStatus;
    1822
    19     public WikipediaEntry(String wikipediaLang, String wikipediaArticle) {
    20         this(wikipediaLang, wikipediaArticle, null, null);
     23    public WikipediaEntry(String lang, String article) {
     24        this(lang, article, null, null);
    2125    }
    2226
    23     public WikipediaEntry(String wikipediaLang, String wikipediaArticle, String label, LatLon coordinate) {
     27    public WikipediaEntry(String lang, String article, String label, LatLon coordinate) {
     28        this.lang = lang;
     29        this.article = article;
    2430        this.label = label;
    25         this.wikipediaLang = wikipediaLang;
    26         this.wikipediaArticle = wikipediaArticle;
    2731        this.coordinate = coordinate;
    2832    }
    2933
     34    static WikipediaEntry parseFromUrl(String url) {
     35        if (url == null) {
     36            return null;
     37        }
     38        // decode URL for nicer value
     39        url = Utils.decodeUrl(url);
     40        // extract Wikipedia language and
     41        final Matcher m = Pattern.compile("(https?:)?//(\\w*)\\.wikipedia\\.org/wiki/(.*)").matcher(url);
     42        if (!m.matches()) {
     43            return null;
     44        }
     45        return new WikipediaEntry(m.group(2), m.group(3));
     46    }
     47
     48    public static WikipediaEntry parseTag(String key, String value) {
     49        if (value == null) {
     50            return null;
     51        } else if (value.startsWith("http")) {
     52            //wikipedia=http...
     53            return WikipediaEntry.parseFromUrl(value);
     54        } else if (value.contains(":")) {
     55            //wikipedia=[lang]:[article]
     56            //wikipedia:[lang]=[lang]:[article]
     57            final String[] item = Utils.decodeUrl(value).split(":", 2);
     58            final String article = item[1].replace("_", " ");
     59            return new WikipediaEntry(item[0], article);
     60        } else if (key.startsWith("wikipedia:")) {
     61            //wikipedia:[lang]=[lang]:[article]
     62            //wikipedia:[lang]=[article]
     63            final String lang = key.split(":", 2)[1];
     64            final String[] item = Utils.decodeUrl(value).split(":", 2);
     65            final String article = item[item.length == 2 ? 1 : 0].replace("_", " ");
     66            return new WikipediaEntry(lang, article);
     67        } else {
     68            return null;
     69        }
     70    }
     71
    3072    public Tag createWikipediaTag() {
    31         return new Tag("wikipedia", wikipediaLang + ":" + wikipediaArticle);
     73        return new Tag("wikipedia", lang + ":" + article);
    3274    }
    3375
     
    4183
    4284    public String getBrowserUrl() {
    43         return WikipediaApp.getSiteUrl(wikipediaLang) + "/wiki/" + Utils.encodeUrl(wikipediaArticle.replace(" ", "_"));
     85        return WikipediaApp.getSiteUrl(lang) + "/wiki/" + Utils.encodeUrl(article.replace(" ", "_"));
    4486    }
    4587
    4688    public String getLabelText() {
    47         return wikipediaArticle;
     89        return article;
    4890    }
    4991
    5092    @Override
    5193    public String toString() {
    52         return wikipediaArticle;
     94        return article;
    5395    }
    5496
     
    5799        return Comparator
    58100                .<WikipediaEntry, String>comparing(x -> x.label, AlphanumComparator.getInstance())
    59                 .thenComparing(x -> x.wikipediaArticle, AlphanumComparator.getInstance())
     101                .thenComparing(x -> x.article, AlphanumComparator.getInstance())
    60102                .compare(this, o);
    61103    }
     104
     105    @Override
     106    public boolean equals(Object o) {
     107        if (this == o) return true;
     108        if (o == null || getClass() != o.getClass()) return false;
     109        final WikipediaEntry that = (WikipediaEntry) o;
     110        return Objects.equals(lang, that.lang) &&
     111                Objects.equals(article, that.article);
     112    }
     113
     114    @Override
     115    public int hashCode() {
     116        return Objects.hash(lang, article);
     117    }
    62118}
  • applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaToggleDialog.java

    r32888 r32891  
    7979                            Main.map.mapView.zoomTo(bbox);
    8080                        }
    81                         final String search = Optional.ofNullable(entry.label).orElse(entry.wikipediaArticle).replaceAll("\\(.*\\)", "");
     81                        final String search = Optional.ofNullable(entry.label).orElse(entry.article).replaceAll("\\(.*\\)", "");
    8282                        SearchAction.search(search, SearchAction.SearchMode.replace);
    8383                    }
     
    9595                        label.setIcon(ImageProvider.getIfAvailable("misc", "grey_check"));
    9696                        label.setToolTipText(/* I18n: WIWOSM server already links Wikipedia article to object/s */ tr("Available via WIWOSM server"));
    97                     } else if (articles.contains(entry.wikipediaArticle)) {
     97                    } else if (articles.contains(entry.article)) {
    9898                        label.setIcon(ImageProvider.getIfAvailable("misc", "green_check"));
    9999                        label.setToolTipText(/* I18n: object/s from dataset contain link to Wikipedia article */ tr("Available in local dataset"));
     
    124124    private String getLanguageOfFirstItem() {
    125125        try {
    126             return list.getModel().getElementAt(0).wikipediaLang;
     126            return list.getModel().getElementAt(0).lang;
    127127        } catch (ArrayIndexOutOfBoundsException ignore) {
    128128            return wikipediaLang.get();
     
    176176            publish(entries.toArray(new WikipediaEntry[entries.size()]));
    177177            WikipediaApp.partitionList(entries, 20).forEach(chunk -> {
    178                 WikipediaApp.updateWIWOSMStatus(chunk.get(0).wikipediaLang, chunk);
     178                WikipediaApp.updateWIWOSMStatus(chunk.get(0).lang, chunk);
    179179                list.repaint();
    180180            });
     
    342342            final LatLon latLon = entry.coordinate != null
    343343                    ? entry.coordinate
    344                     : WikipediaApp.getCoordinateForArticle(entry.wikipediaLang, entry.wikipediaArticle);
     344                    : WikipediaApp.getCoordinateForArticle(entry.lang, entry.article);
    345345            if (latLon == null) {
    346346                return;
Note: See TracChangeset for help on using the changeset viewer.