    001// License: GPL. For details, see LICENSE file.
    002package org.openstreetmap.josm.plugins.streetside.cache;
    003
    004import java.net.URL;
    005import java.util.HashMap;
    006
    007import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
    008import org.openstreetmap.josm.data.cache.JCSCachedTileLoaderJob;
    009import org.openstreetmap.josm.data.imagery.TileJobOptions;
    010import org.openstreetmap.josm.plugins.streetside.utils.StreetsideURL.VirtualEarth;
    011
    012/**
    013 * Stores the downloaded pictures locally.
    014 *
    015 * @author nokutu
    016 *
    017 */
    018public class StreetsideCache extends JCSCachedTileLoaderJob<String, BufferedImageCacheEntry> {
    019
    020        private final URL url;
    021        private final String id;
    022
    023        /**
    024         * Types of images.
    025         *
    026         * @author nokutu
    027         */
    028        public enum Type {
    029                /** Full quality image */
    030                FULL_IMAGE,
    031                /** Low quality image */
    032                THUMBNAIL
    033        }
    034
    035        /**
    036         * Main constructor.
    037         *
    038         * @param id
    039         *          The id of the image.
    040         * @param type
    041         *          The type of image that must be downloaded (THUMBNAIL or
    042         *          FULL_IMAGE).
    043         */
    044        public StreetsideCache(final String id, final Type type) {
    045                super(Caches.ImageCache.getInstance().getCache(),new TileJobOptions(50000, 50000, new HashMap<String,String>(),50000l));
    046
    047                if (id == null || type == null) {
    048                        this.id = null;
    049                        url = null;
    050                } else {
    051                        this.id = id;
    052                        url = VirtualEarth.streetsideTile(id, type == Type.THUMBNAIL);
    053                }
    054        }
    055
    056        @Override
    057        public String getCacheKey() {
    058                return id;
    059        }
    060
    061        @Override
    062        public URL getUrl() {
    063                return url;
    064        }
    065
    066        @Override
    067        protected BufferedImageCacheEntry createCacheEntry(byte[] content) {
    068                return new BufferedImageCacheEntry(content);
    069        }
    070
    071        @Override
    072        protected boolean isObjectLoadable() {
    073                if (cacheData == null) {
    074                        return false;
    075                }
    076                final byte[] content = cacheData.getContent();
    077                return content != null && content.length > 0;
    078        }
    079}