001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.data.imagery; 003 004import org.apache.commons.jcs3.access.behavior.ICacheAccess; 005import org.openstreetmap.gui.jmapviewer.Tile; 006import org.openstreetmap.gui.jmapviewer.interfaces.TileJob; 007import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener; 008import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry; 009import org.openstreetmap.josm.data.preferences.IntegerProperty; 010 011/** 012 * Tileloader for WMS based imagery. It is separate to use different ThreadPoolExecutor, as we want 013 * to define number of simultaneous downloads for WMS separately 014 * 015 * @author Wiktor Niesiobędzki 016 * @since 8526 017 */ 018public class WMSCachedTileLoader extends TMSCachedTileLoader { 019 020 /** 021 * overrides the THREAD_LIMIT in superclass, as we want to have separate limit and pool for WMS 022 */ 023 public static final IntegerProperty THREAD_LIMIT = new IntegerProperty("imagery.wms.loader.maxjobs", 3); 024 025 /** 026 * Creates a TileLoader with separate WMS download thread pool. 027 * 028 * @param listener that will be notified when tile is loaded 029 * @param cache reference 030 * @param options tile job options 031 */ 032 public WMSCachedTileLoader(TileLoaderListener listener, ICacheAccess<String, BufferedImageCacheEntry> cache, 033 TileJobOptions options) { 034 035 super(listener, cache, options); 036 // use WMS specific maximum number of download threads and use the same value for concurrent downloads per host 037 // for each layer use separate thread pool so the limit set in preferences is per imagery 038 setDownloadExecutor(TMSCachedTileLoader.getNewThreadPoolExecutor("WMS-downloader-%d", THREAD_LIMIT.get(), THREAD_LIMIT.get())); 039 } 040 041 @Override 042 public TileJob createTileLoaderJob(Tile tile) { 043 return new WMSCachedTileLoaderJob(listener, tile, cache, options, getDownloadExecutor()); 044 } 045}