/*+-------------+----------------------------------------------------------* *| | |_|_|_|_| Fraunhofer-Institut fuer Graphische Datenverarbeitung * *|__|__|_|_|_|_| (Fraunhofer Institute for Computer Graphics) * *| | |_|_|_|_| * *|__|__|_|_|_|_| * *| __ | ___| * *| /_ /_ / _ | Fraunhoferstrasse 5 * *|/ / / /__/ | D-64283 Darmstadt, Germany * *+-------------+----------------------------------------------------------*/ package org.jdesktop.swingx.mapviewer; import java.net.URI; /** * CachingTileProviderDecorator * * @author Simon Templer */ public class CachingTileProviderDecorator extends AbstractTileProviderDecorator { private final int[] width; private final int[] height; private final int[] tileWidth; private final int[] tileHeight; /** * @param tileProvider the wrapped tile provider */ public CachingTileProviderDecorator(TileProvider tileProvider) { super(tileProvider); width = new int[tileProvider.getMaximumZoom() - tileProvider.getMinimumZoom() + 1]; height = new int[tileProvider.getMaximumZoom() - tileProvider.getMinimumZoom() + 1]; tileWidth = new int[tileProvider.getMaximumZoom() - tileProvider.getMinimumZoom() + 1]; tileHeight = new int[tileProvider.getMaximumZoom() - tileProvider.getMinimumZoom() + 1]; for (int i = 0; i <= tileProvider.getMaximumZoom() - tileProvider.getMinimumZoom(); i++) { // preget width, height and tilesize values int zoom = i + tileProvider.getMinimumZoom(); width[i] = tileProvider.getMapWidthInTiles(zoom); height[i] = tileProvider.getMapHeightInTiles(zoom); tileWidth[i] = tileProvider.getTileWidth(zoom); tileHeight[i] = tileProvider.getTileHeight(zoom); } } /** * @see AbstractTileProviderDecorator#getMapHeightInTiles(int) */ @Override public int getMapHeightInTiles(int zoom) { int index = zoom - tileProvider.getMinimumZoom(); if (index >= 0 && index < height.length) return height[index]; else return tileProvider.getMapHeightInTiles(zoom); } /** * @see AbstractTileProviderDecorator#getMapWidthInTiles(int) */ @Override public int getMapWidthInTiles(int zoom) { int index = zoom - tileProvider.getMinimumZoom(); if (index >= 0 && index < width.length) return width[index]; else return tileProvider.getMapWidthInTiles(zoom); } /** * @see AbstractTileProviderDecorator#getTileHeight(int) */ @Override public int getTileHeight(int zoom) { int index = zoom - tileProvider.getMinimumZoom(); if (index >= 0 && index < tileHeight.length) return tileHeight[index]; else return tileProvider.getTileHeight(zoom); } /** * @see AbstractTileProviderDecorator#getTileWidth(int) */ @Override public int getTileWidth(int zoom) { int index = zoom - tileProvider.getMinimumZoom(); if (index >= 0 && index < tileWidth.length) return tileWidth[index]; else return tileProvider.getTileWidth(zoom); } /** * @see AbstractTileProviderDecorator#getTileUris(int, int, int) */ @Override public URI[] getTileUris(int x, int y, int zoom) { // TODO cache tile uris? return super.getTileUris(x, y, zoom); } }