source: josm/trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java@ 8168

Last change on this file since 8168 was 8168, checked in by bastiK, 9 years ago

see #11216 - Limit size of TMS cache (patch by wiktorn)

File size: 3.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.imagery;
3
4import java.io.IOException;
5import java.util.Map;
6
7import org.apache.commons.jcs.access.behavior.ICacheAccess;
8import org.openstreetmap.gui.jmapviewer.Tile;
9import org.openstreetmap.gui.jmapviewer.interfaces.CachedTileLoader;
10import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
11import org.openstreetmap.gui.jmapviewer.interfaces.TileJob;
12import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
13import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
14import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
15import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
16import org.openstreetmap.josm.data.cache.JCSCacheManager;
17import org.openstreetmap.josm.data.preferences.IntegerProperty;
18
19/**
20 * @author Wiktor Niesiobędzki
21 *
22 * Wrapper class that bridges between JCS cache and Tile Loaders
23 *
24 */
25public class TMSCachedTileLoader implements TileLoader, CachedTileLoader, TileCache {
26
27 private ICacheAccess<String, BufferedImageCacheEntry> cache;
28 private int connectTimeout;
29 private int readTimeout;
30 private Map<String, String> headers;
31 private TileLoaderListener listener;
32 public static final String PREFERENCE_PREFIX = "imagery.tms.cache.";
33 // average tile size is about 20kb
34 public static IntegerProperty MAX_OBJECTS_ON_DISK = new IntegerProperty(PREFERENCE_PREFIX + "max_objects_disk", 25000); // 25000 is around 500MB under this assumptions
35
36
37 /**
38 * Constructor
39 * @param listener called when tile loading has finished
40 * @param name of the cache
41 * @param connectTimeout to remote resource
42 * @param readTimeout to remote resource
43 * @param headers to be sent along with request
44 * @param cacheDir where cache file shall reside
45 * @throws IOException when cache initialization fails
46 */
47 public TMSCachedTileLoader(TileLoaderListener listener, String name, int connectTimeout, int readTimeout, Map<String, String> headers, String cacheDir) throws IOException {
48 this.cache = JCSCacheManager.getCache(name,
49 1000, // use JCS memory cache instead of MemoryTileCache
50 MAX_OBJECTS_ON_DISK.get(),
51 cacheDir);
52 this.connectTimeout = connectTimeout;
53 this.readTimeout = readTimeout;
54 this.headers = headers;
55 this.listener = listener;
56 }
57
58 @Override
59 public TileJob createTileLoaderJob(Tile tile) {
60 return new TMSCachedTileLoaderJob(listener, tile, cache, connectTimeout, readTimeout, headers);
61 }
62
63 @Override
64 public void clearCache() {
65 this.cache.clear();
66 }
67
68 @Override
69 public Tile getTile(TileSource source, int x, int y, int z) {
70 return createTileLoaderJob(new Tile(source,x, y, z)).getTile();
71 }
72
73 @Override
74 public void addTile(Tile tile) {
75 createTileLoaderJob(tile).submit();
76 }
77
78 @Override
79 public int getTileCount() {
80 return 0;
81 }
82
83 @Override
84 public void clear() {
85 cache.clear();
86 }
87
88 public String getStats() {
89 return cache.getStats();
90 }
91}
Note: See TracBrowser for help on using the repository browser.