/******************************************************************************* * Copyright (c) MOBAC developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package mobac.program.tilestore; import java.awt.Point; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.swing.JOptionPane; import mobac.exceptions.TileStoreException; import mobac.program.DirectoryManager; import mobac.program.interfaces.MapSource; import mobac.program.model.Settings; import mobac.program.tilestore.berkeleydb.BerkeleyDbTileStore; import mobac.utilities.I18nUtils; import org.apache.log4j.Logger; public abstract class TileStore { protected static TileStore INSTANCE = null; protected Logger log; protected File tileStoreDir; public static synchronized void initialize() { if (INSTANCE != null) return; try { INSTANCE = new BerkeleyDbTileStore(); } catch (TileStoreException e) { String errMsg = I18nUtils.localizedStringForKey("msg_tile_store_access_conflict"); JOptionPane.showMessageDialog(null, errMsg, I18nUtils.localizedStringForKey("msg_tile_store_access_conflict_title"), JOptionPane.ERROR_MESSAGE); System.exit(1); } } public static TileStore getInstance() { return INSTANCE; } protected TileStore() { log = Logger.getLogger(this.getClass()); String tileStorePath = Settings.getInstance().directories.tileStoreDirectory; if (tileStorePath != null) tileStoreDir = new File(tileStorePath); else tileStoreDir = DirectoryManager.tileStoreDir; log.debug("Tile store path: " + tileStoreDir); } public abstract void putTileData(byte[] tileData, int x, int y, int zoom, MapSource mapSource) throws IOException; public abstract void putTileData(byte[] tileData, int x, int y, int zoom, MapSource mapSource, long timeLastModified, long timeExpires, String eTag) throws IOException; /** * * @param x * @param y * @param zoom * @param mapSource * @return */ public abstract TileStoreEntry getTile(int x, int y, int zoom, MapSource mapSource); public abstract boolean contains(int x, int y, int zoom, MapSource mapSource); public abstract void prepareTileStore(MapSource mapSource); public abstract void clearStore(String storeName); public abstract String[] getAllStoreNames(); /** * Returns <code>true</code> if the tile store directory of the specified {@link MapSource} exists. * * @param mapSource * @return */ public abstract boolean storeExists(MapSource mapSource); /** * * @param mapSourceName * @return * @throws InterruptedException */ public abstract TileStoreInfo getStoreInfo(String mapSourceName) throws InterruptedException; /** * * @param mapSource * @param zoom * @param tileNumMin * @param tileNumMax * @return * @throws InterruptedException */ public abstract BufferedImage getCacheCoverage(MapSource mapSource, int zoom, Point tileNumMin, Point tileNumMax) throws InterruptedException; public abstract void closeAll(); public abstract void putTile(TileStoreEntry tile, MapSource mapSource); public abstract TileStoreEntry createNewEntry(int x, int y, int zoom, byte[] data, long timeLastModified, long timeExpires, String eTag); /** * Creates a new {@link TileStoreEntry} that represents a missing tile in a sparse map source * * @param x * @param y * @param zoom * @return */ public abstract TileStoreEntry createNewEmptyEntry(int x, int y, int zoom); }