Ignore:
Timestamp:
2015-04-07T09:00:22+02:00 (11 years ago)
Author:
bastiK
Message:

see #11216 - fixes NPE when BingAttribution is not loaded, and for not showing tiles at overzoom (patch by wiktorn)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java

    r8168 r8174  
    88import java.net.HttpURLConnection;
    99import java.net.MalformedURLException;
     10import java.net.URL;
    1011import java.net.URLConnection;
    1112import java.util.HashSet;
     
    126127    public void submit(ICachedLoaderListener listener) {
    127128        boolean first = false;
    128         String url = getUrl().toString();
    129         if (url == null) {
     129        URL url = getUrl();
     130        String deduplicationKey = null;
     131        if (url != null) {
     132            // url might be null, for example when Bing Attribution is not loaded yet
     133            deduplicationKey = url.toString();
     134        }
     135        if (deduplicationKey == null) {
    130136            log.log(Level.WARNING, "No url returned for: {0}, skipping", getCacheKey());
    131137            return;
    132138        }
    133139        synchronized (inProgress) {
    134             Set<ICachedLoaderListener> newListeners = inProgress.get(url);
     140            Set<ICachedLoaderListener> newListeners = inProgress.get(deduplicationKey);
    135141            if (newListeners == null) {
    136142                newListeners = new HashSet<>();
    137                 inProgress.put(url, newListeners);
     143                inProgress.put(deduplicationKey, newListeners);
    138144                first = true;
    139145            }
     
    162168
    163169    /**
    164      * 
     170     *
    165171     * @return checks if object from cache has sufficient data to be returned
    166172     */
     
    171177
    172178    /**
    173      * 
     179     *
    174180     * @return cache object as empty, regardless of what remote resource has returned (ex. based on headers)
    175181     */
     
    264270    }
    265271
     272    /**
     273     * @return true if object was successfully downloaded, false, if there was a loading failure
     274     */
     275
    266276    private boolean loadObject() {
    267277        try {
     
    316326                            new Object[] {getCacheKey(), raw.length, getUrl()});
    317327                    return true;
    318                 } else {
     328                } else  {
    319329                    cacheData = createCacheEntry(new byte[]{});
    320330                    cache.put(getCacheKey(), cacheData, attributes);
     
    326336            log.log(Level.FINE, "JCS - Caching empty object as server returned 404 for: {0}", getUrl());
    327337            cache.put(getCacheKey(), createCacheEntry(new byte[]{}), attributes);
    328             handleNotFound();
    329             return true;
     338            return handleNotFound();
    330339        } catch (Exception e) {
    331340            log.log(Level.WARNING, "JCS - Exception during download " + getUrl(), e);
     
    336345    }
    337346
    338     protected abstract void handleNotFound();
     347    /**
     348     *  @return if we should treat this object as properly loaded
     349     */
     350    protected abstract boolean handleNotFound();
    339351
    340352    protected abstract V createCacheEntry(byte[] content);
Note: See TracChangeset for help on using the changeset viewer.