Changeset 15952 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2020-02-28T21:42:52+01:00 (5 years ago)
Author:
Don-vip
Message:

see #18772 - better error message, add non-regression tests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/tools/Territories.java

    r15939 r15952  
    22package org.openstreetmap.josm.tools;
    33
     4import static java.util.Optional.ofNullable;
    45import static org.openstreetmap.josm.tools.I18n.tr;
    56
     
    2223import javax.json.Json;
    2324import javax.json.JsonArray;
    24 import javax.json.JsonObject;
    2525import javax.json.JsonString;
    2626import javax.json.JsonValue;
     
    163163    private static void initializeExternalData() {
    164164        taginfoGeofabrikCache = new TreeMap<>();
    165         try (CachedFile cf = new CachedFile(Config.getUrls().getJOSMWebsite() + "/remote/geofabrik-index-v1-nogeom.json");
    166                 InputStream is = cf.getInputStream();
    167                 JsonParser json = Json.createParser(is)) {
     165        initializeExternalData(taginfoGeofabrikCache, "Geofabrik",
     166                Config.getUrls().getJOSMWebsite() + "/remote/geofabrik-index-v1-nogeom.json");
     167    }
     168
     169    static void initializeExternalData(Map<String, TaginfoRegionalInstance> cache, String source, String path) {
     170        try (CachedFile cf = new CachedFile(path); InputStream is = cf.getInputStream(); JsonParser json = Json.createParser(is)) {
    168171            while (json.hasNext()) {
    169172                Event event = json.next();
    170173                if (event == Event.START_OBJECT) {
    171174                    for (JsonValue feature : json.getObject().getJsonArray("features")) {
    172                         JsonObject props = feature.asJsonObject().getJsonObject("properties");
    173                         if (props != null) {
    174                             JsonObject urls = props.getJsonObject("urls");
    175                             if (urls != null) {
    176                                 String taginfo = urls.getString(TAGINFO);
    177                                 if (taginfo != null) {
    178                                     JsonArray iso1 = props.getJsonArray(ISO3166_1_LC);
    179                                     JsonArray iso2 = props.getJsonArray(ISO3166_2_LC);
    180                                     if (iso1 != null) {
    181                                         readExternalTaginfo(taginfo, iso1);
    182                                     } else if (iso2 != null) {
    183                                         readExternalTaginfo(taginfo, iso2);
    184                                     }
    185                                 }
     175                        ofNullable(feature.asJsonObject().getJsonObject("properties")).ifPresent(props ->
     176                        ofNullable(props.getJsonObject("urls")).ifPresent(urls ->
     177                        ofNullable(urls.getString(TAGINFO)).ifPresent(taginfo -> {
     178                            JsonArray iso1 = props.getJsonArray(ISO3166_1_LC);
     179                            JsonArray iso2 = props.getJsonArray(ISO3166_2_LC);
     180                            if (iso1 != null) {
     181                                readExternalTaginfo(cache, taginfo, iso1, source);
     182                            } else if (iso2 != null) {
     183                                readExternalTaginfo(cache, taginfo, iso2, source);
    186184                            }
    187                         }
     185                        })));
    188186                    }
    189187                }
    190188            }
    191189        } catch (IOException | JsonParsingException e) {
    192             Logging.trace(e);
    193             Logging.warn(tr("Failed to parse taginfo data geofabrik-index-v1-nogeom.json"));
    194         }
    195     }
    196 
    197     private static void readExternalTaginfo(String taginfo, JsonArray jsonCodes) {
     190            Logging.debug(e);
     191            Logging.warn(tr("Failed to parse external taginfo data at {0}: {1}", path, e.getMessage()));
     192        }
     193    }
     194
     195    private static void readExternalTaginfo(Map<String, TaginfoRegionalInstance> cache, String taginfo, JsonArray jsonCodes, String source) {
    198196        Set<String> isoCodes = jsonCodes.getValuesAs(JsonString.class).stream().map(JsonString::getString).collect(Collectors.toSet());
    199         isoCodes.forEach(s -> taginfoGeofabrikCache.put(s, new TaginfoRegionalInstance(taginfo, isoCodes, "Geofabrik")));
     197        isoCodes.forEach(s -> cache.put(s, new TaginfoRegionalInstance(taginfo, isoCodes, source)));
    200198    }
    201199
Note: See TracChangeset for help on using the changeset viewer.