Changeset 8598 in josm for trunk/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java
- Timestamp:
- 2015-07-12T23:55:18+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java
r8530 r8598 3 3 4 4 import java.io.File; 5 import java. io.IOException;6 import java. util.HashMap;5 import java.lang.reflect.Constructor; 6 import java.lang.reflect.InvocationTargetException; 7 7 import java.util.Map; 8 import java.util.concurrent.ConcurrentHashMap; 8 9 10 import org.apache.commons.jcs.access.behavior.ICacheAccess; 9 11 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader; 10 12 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener; 11 13 import org.openstreetmap.josm.Main; 12 14 import org.openstreetmap.josm.data.Version; 15 import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry; 13 16 import org.openstreetmap.josm.data.preferences.StringProperty; 14 17 … … 19 22 * @since 8526 20 23 */ 21 public abstractclass CachedTileLoaderFactory implements TileLoaderFactory {24 public class CachedTileLoaderFactory implements TileLoaderFactory { 22 25 /** 23 26 * Keeps the cache directory where 24 27 */ 25 28 public static final StringProperty PROP_TILECACHE_DIR = getTileCacheDir(); 26 private String cacheName; 29 private ICacheAccess<String, BufferedImageCacheEntry> cache; 30 private Constructor<? extends TileLoader> tileLoaderConstructor; 27 31 28 32 /** 29 * @param cacheName name of the cache region, that the created loader will use 33 * @param cache cache instance which will be used by tile loaders created by this tile loader 34 * @param tileLoaderClass tile loader class that will be created 35 * 30 36 */ 31 public CachedTileLoaderFactory(String cacheName) { 32 this.cacheName = cacheName; 37 public CachedTileLoaderFactory(ICacheAccess<String, BufferedImageCacheEntry> cache, Class<? extends TileLoader> tileLoaderClass) { 38 this.cache = cache; 39 try { 40 tileLoaderConstructor = tileLoaderClass.getConstructor( 41 TileLoaderListener.class, 42 ICacheAccess.class, 43 int.class, 44 int.class, 45 Map.class); 46 } catch (NoSuchMethodException | SecurityException e) { 47 Main.warn(e); 48 throw new RuntimeException(e); 49 } 33 50 } 34 51 … … 50 67 @Override 51 68 public TileLoader makeTileLoader(TileLoaderListener listener, Map<String, String> inputHeaders) { 52 Map<String, String> headers = new HashMap<>();69 Map<String, String> headers = new ConcurrentHashMap<>(); 53 70 headers.put("User-Agent", Version.getInstance().getFullAgentString()); 54 71 headers.put("Accept", "text/html, image/png, image/jpeg, image/gif, */*"); … … 56 73 headers.putAll(inputHeaders); 57 74 58 try { 59 return getLoader(listener, cacheName, 60 Main.pref.getInteger("socket.timeout.connect", 15) * 1000, 61 Main.pref.getInteger("socket.timeout.read", 30) * 1000, 62 headers, 63 PROP_TILECACHE_DIR.get()); 64 } catch (IOException e) { 65 Main.warn(e); 66 } 67 return null; 75 return getLoader(listener, cache, 76 Main.pref.getInteger("socket.timeout.connect", 15) * 1000, 77 Main.pref.getInteger("socket.timeout.read", 30) * 1000, 78 headers); 68 79 } 69 80 70 protected abstract TileLoader getLoader(TileLoaderListener listener, String cacheName, int connectTimeout, int readTimeout, 71 Map<String, String> headers, String cacheDir) throws IOException; 81 protected TileLoader getLoader(TileLoaderListener listener, ICacheAccess<String, BufferedImageCacheEntry> cache, 82 int connectTimeout, int readTimeout, Map<String, String> headers) { 83 try { 84 return tileLoaderConstructor.newInstance( 85 listener, 86 cache, 87 connectTimeout, 88 readTimeout, 89 headers); 90 } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { 91 Main.warn(e); 92 throw new RuntimeException(e); 93 } 94 } 72 95 }
Note:
See TracChangeset
for help on using the changeset viewer.