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}