Ticket #19071: 19071.patch

File 19071.patch, 8.9 KB (added by simon04, 5 years ago)
  • build.xml

    commit f9b6849a844329b96bfed184cfc224141f9cd5a8
    Author: Simon Legner <Simon.Legner@gmail.com>
    Date:   2020-04-11 19:39:24 +0200
    
        fix #19071 - Tag2Link: obtain rules via Apache Ivy and org.webjars.npm
    
    diff --git a/build.xml b/build.xml
    index 77a24027c..bf67bdfa1 100644
    a b Build-Date: ${build.tstamp}  
    10551055        <ivy:cachepath log="download-only" pathid="test.path" conf="test"/>
    10561056    </target>
    10571057    <target name="extract-libraries" depends="resolve" description="extract libraries to build dir">
     1058        <unzip dest="${build.dir}">
     1059            <fileset refid="runtime.fileset"/>
     1060            <patternset>
     1061                <include name="META-INF/resources/webjars/tag2link/*/index.json"/>
     1062            </patternset>
     1063        </unzip>
    10581064        <unzip dest="${build.dir}">
    10591065            <fileset refid="runtime.fileset"/>
    10601066            <patternset>
  • ivy.xml

    diff --git a/ivy.xml b/ivy.xml
    index 55f43c995..d99f56381 100644
    a b  
    3030        <dependency conf="api->default" org="org.tukaani" name="xz" rev="1.8"/>
    3131        <dependency conf="api->default" org="com.drewnoakes" name="metadata-extractor" rev="2.13.0"/>
    3232        <dependency conf="api->default" org="ch.poole" name="OpeningHoursParser" rev="0.21.1"/>
     33        <dependency conf="api->default" org="org.webjars.npm" name="tag2link" rev="2020.4.6"/>
    3334        <!-- sources->sources -->
    3435        <dependency conf="sources->sources" org="org.openstreetmap.jmapviewer" name="jmapviewer" rev="2.13"/>
    3536        <dependency conf="sources->sources" org="javax.json" name="javax.json-api" rev="1.1.4"/>
     
    4041        <dependency conf="sources->sources" org="org.tukaani" name="xz" rev="1.8"/>
    4142        <dependency conf="sources->sources" org="com.drewnoakes" name="metadata-extractor" rev="2.13.0"/>
    4243        <dependency conf="sources->sources" org="ch.poole" name="OpeningHoursParser" rev="0.21.1"/>
     44        <dependency conf="sources->sources" org="org.webjars.npm" name="tag2link" rev="2020.4.6"/>
    4345        <!-- commonslang->default -->
    4446        <dependency conf="commonslang->default" org="org.apache.commons" name="commons-lang3" rev="3.10"/>
    4547        <!-- jacocoant->default -->
  • deleted file resources/data/tag2link.sophox.sparql

    diff --git a/resources/data/tag2link.sophox.sparql b/resources/data/tag2link.sophox.sparql
    deleted file mode 100644
    index 045ec234b..000000000
    + -  
    1 SELECT (CONCAT("Key:", ?permanent_key_ID) as ?OSM_key) ?formatter_URL WHERE {
    2   ?item osmdt:P2 osmd:Q7.
    3   ?item osmdt:P16 ?permanent_key_ID.
    4   ?item osmdt:P8 ?formatter_URL.
    5 }
  • deleted file resources/data/tag2link.wikidata.sparql

    diff --git a/resources/data/tag2link.wikidata.sparql b/resources/data/tag2link.wikidata.sparql
    deleted file mode 100644
    index 3a67b5af7..000000000
    + -  
    1 SELECT ?OSM_key ?formatter_URL WHERE {
    2   { ?item wdt:P1282 ?OSM_key. }
    3   FILTER(STRSTARTS(?OSM_key, 'Key:')) .
    4 
    5   {
    6     { ?item wdt:P1630 ?formatter_URL. }
    7     UNION
    8     { ?item wdt:P3303 ?formatter_URL. }
    9   }
    10 }
  • src/org/openstreetmap/josm/tools/Tag2Link.java

    diff --git a/src/org/openstreetmap/josm/tools/Tag2Link.java b/src/org/openstreetmap/josm/tools/Tag2Link.java
    index c778461f4..2fcd89d05 100644
    a b  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55import static org.openstreetmap.josm.tools.I18n.trn;
    66
    7 import java.io.BufferedReader;
    87import java.io.IOException;
     8import java.io.InputStream;
    99import java.net.MalformedURLException;
    1010import java.net.URL;
    11 import java.nio.charset.StandardCharsets;
    1211import java.util.Collections;
    1312import java.util.Map;
    1413import java.util.function.UnaryOperator;
     
    2322import javax.json.JsonValue;
    2423
    2524import org.openstreetmap.josm.data.osm.OsmUtils;
    26 import org.openstreetmap.josm.io.CachedFile;
    27 import org.openstreetmap.josm.spi.preferences.Config;
    2825
    2926/**
    3027 * Extracts web links from OSM tags.
    private Tag2Link() {  
    7976    public static void initialize() {
    8077        try {
    8178            wikidataRules.clear();
    82             fetchRulesViaSPARQL("resource://data/tag2link.wikidata.sparql", Config.getUrls().getJOSMWebsite() + "/remote/wikidata-sparql");
    83             fetchRulesViaSPARQL("resource://data/tag2link.sophox.sparql", Config.getUrls().getJOSMWebsite() + "/remote/sophox-sparql");
     79            initializeFromResources();
    8480        } catch (Exception e) {
    8581            Logging.error("Failed to initialize tag2link rules");
    8682            Logging.error(e);
    public static void initialize() {  
    8884    }
    8985
    9086    /**
    91      * Fetches rules from Wikidata using a SPARQL query.
     87     * Initializes the tag2link rules from the resources.
    9288     *
    93      * @param query the SPARQL query
    94      * @param server the query server
    9589     * @throws IOException in case of I/O error
    9690     */
    97     private static void fetchRulesViaSPARQL(final String query, final String server) throws IOException {
    98         final int initialSize = wikidataRules.size();
    99         final String sparql;
    100         try (CachedFile cachedFile = new CachedFile(query)) {
    101             sparql = new String(cachedFile.getByteContent(), StandardCharsets.UTF_8);
    102         }
    103 
     91    private static void initializeFromResources() throws IOException {
     92        final String resource = "META-INF/resources/webjars/tag2link/2020.4.6/index.json";
    10493        final JsonArray rules;
    105         try (CachedFile cachedFile = new CachedFile(server + "?query=" + Utils.encodeUrl(sparql));
    106              BufferedReader reader = cachedFile.setHttpAccept("application/json").getContentReader();
    107              JsonReader jsonReader = Json.createReader(reader)) {
    108             rules = jsonReader.read().asJsonObject().getJsonObject("results").getJsonArray("bindings");
     94        try (InputStream inputStream = Tag2Link.class.getClassLoader().getResourceAsStream(resource);
     95             JsonReader jsonReader = Json.createReader(inputStream)) {
     96            rules = jsonReader.readArray();
    10997        }
    11098
    11199        for (JsonValue rule : rules) {
    112             final String key = rule.asJsonObject().getJsonObject("OSM_key").getString("value");
    113             final String url = rule.asJsonObject().getJsonObject("formatter_URL").getString("value");
     100            final String key = rule.asJsonObject().getString("key");
     101            final String url = rule.asJsonObject().getString("url");
    114102            if (key.startsWith("Key:")) {
    115103                wikidataRules.put(key.substring("Key:".length()), url);
    116104            }
    private static void fetchRulesViaSPARQL(final String query, final String server)  
    119107        Stream.of("image", "url", "website", "wikidata", "wikimedia_commons")
    120108                .forEach(wikidataRules::remove);
    121109
    122         final int size = wikidataRules.size() - initialSize;
     110        final int size = wikidataRules.size();
    123111        Logging.info(trn(
    124112                "Obtained {0} Tag2Link rule from {1}",
    125113                "Obtained {0} Tag2Link rules from {1}",
    126                 size, size, server));
     114                size, size, resource));
    127115    }
    128116
    129117    /**
  • test/unit/org/openstreetmap/josm/tools/Tag2LinkTest.java

    diff --git a/test/unit/org/openstreetmap/josm/tools/Tag2LinkTest.java b/test/unit/org/openstreetmap/josm/tools/Tag2LinkTest.java
    index 1e1bc16fd..4a2a8928b 100644
    a b void checkLinks(String... expected) {  
    2323        Assert.assertEquals(Arrays.asList(expected), links);
    2424    }
    2525
     26    /**
     27     * Unit test of function {@link Tag2Link#initialize()}.
     28     */
     29    @Test
     30    public void testInitialize() {
     31        Tag2Link.initialize();
     32        Assert.assertTrue("obtains at least 40 rules", Tag2Link.wikidataRules.size() > 40);
     33    }
     34
    2635    /**
    2736     * Unit test of function {@link Tag2Link#getLinksForTag}.
    2837     */
  • deleted file test/unit/org/openstreetmap/josm/tools/Tag2LinkTestIT.java

    diff --git a/test/unit/org/openstreetmap/josm/tools/Tag2LinkTestIT.java b/test/unit/org/openstreetmap/josm/tools/Tag2LinkTestIT.java
    deleted file mode 100644
    index 0dc69c7cb..000000000
    + -  
    1 // License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.tools;
    3 
    4 import org.junit.Assert;
    5 import org.junit.ClassRule;
    6 import org.junit.Test;
    7 import org.openstreetmap.josm.testutils.JOSMTestRules;
    8 
    9 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
    10 
    11 /**
    12  * Integration tests for the {@link Tag2Link}
    13  */
    14 public class Tag2LinkTestIT {
    15 
    16     /**
    17      * Setup rule
    18      */
    19     @ClassRule
    20     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
    21     public static JOSMTestRules test = new JOSMTestRules().timeout(20_000);
    22 
    23     /**
    24      * Integration test of function {@link org.openstreetmap.josm.tools.Tag2Link#initialize()}.
    25      */
    26     @Test
    27     public void testInitialize() {
    28         Tag2Link.initialize();
    29         Assert.assertTrue("obtails at least 40 rules", Tag2Link.wikidataRules.size() > 40);
    30     }
    31 }