001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.imagery;
003
004import org.apache.commons.jcs.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 downloader.
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        setDownloadExecutor(TMSCachedTileLoader.getNewThreadPoolExecutor("WMS-downloader-%d", THREAD_LIMIT.get()));
037    }
038
039    @Override
040    public TileJob createTileLoaderJob(Tile tile) {
041        return new WMSCachedTileLoaderJob(listener, tile, cache, options, getDownloadExecutor());
042    }
043}