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