// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.dataset.v0_6.impl;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
/**
* Implements a dataset store file manager using temporary files.
*
* @author Brett Henderson
*/
public class TempFileDatasetStoreFileManager implements DatasetStoreFileManager {
private static Logger log = Logger.getLogger(TempFileDatasetStoreFileManager.class.getName());
private List<File> allFiles;
private File nodeObjectFile;
private File nodeObjectOffsetIndexFile;
private File nodeTileIndexFile;
private File wayObjectFile;
private File wayObjectOffsetIndexFile;
private Map<Integer, File> wayTileIndexFileMap;
private File nodeWayIndexFile;
private File relationObjectFile;
private File relationObjectOffsetIndexFile;
private File nodeRelationIndexFile;
private File wayRelationIndexFile;
private File relationRelationIndexFile;
/**
* Creates a new instance.
*/
public TempFileDatasetStoreFileManager() {
allFiles = new ArrayList<File>();
wayTileIndexFileMap = new HashMap<Integer, File>();
}
/**
* Creates a temporary file.
*
* @param prefix
* The temporary file name prefix.
* @return The newly created temporary file.
*/
private File createTempFile(String prefix) {
try {
File file;
file = File.createTempFile(prefix, null);
allFiles.add(file);
return file;
} catch (IOException e) {
throw new OsmosisRuntimeException("Unable to create a new temporary file.", e);
}
}
/**
* {@inheritDoc}
*/
@Override
public File getNodeObjectFile() {
if (nodeObjectFile == null) {
nodeObjectFile = createTempFile("dsno");
}
return nodeObjectFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getNodeObjectOffsetIndexFile() {
if (nodeObjectOffsetIndexFile == null) {
nodeObjectOffsetIndexFile = createTempFile("dsnooi");
}
return nodeObjectOffsetIndexFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getNodeTileIndexFile() {
if (nodeTileIndexFile == null) {
nodeTileIndexFile = createTempFile("dsnti");
}
return nodeTileIndexFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getWayObjectFile() {
if (wayObjectFile == null) {
wayObjectFile = createTempFile("dswo");
}
return wayObjectFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getWayObjectOffsetIndexFile() {
if (wayObjectOffsetIndexFile == null) {
wayObjectOffsetIndexFile = createTempFile("dswooi");
}
return wayObjectOffsetIndexFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getWayTileIndexFile(int instance) {
if (!wayTileIndexFileMap.containsKey(instance)) {
wayTileIndexFileMap.put(instance, createTempFile("dswti"));
}
return wayTileIndexFileMap.get(instance);
}
/**
* {@inheritDoc}
*/
@Override
public File getNodeWayIndexFile() {
if (nodeWayIndexFile == null) {
nodeWayIndexFile = createTempFile("dsnwi");
}
return nodeWayIndexFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getRelationObjectFile() {
if (relationObjectFile == null) {
relationObjectFile = createTempFile("dsro");
}
return relationObjectFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getRelationObjectOffsetIndexFile() {
if (relationObjectOffsetIndexFile == null) {
relationObjectOffsetIndexFile = createTempFile("dsrooi");
}
return relationObjectOffsetIndexFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getNodeRelationIndexFile() {
if (nodeRelationIndexFile == null) {
nodeRelationIndexFile = createTempFile("dsnri");
}
return nodeRelationIndexFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getWayRelationIndexFile() {
if (wayRelationIndexFile == null) {
wayRelationIndexFile = createTempFile("dswri");
}
return wayRelationIndexFile;
}
/**
* {@inheritDoc}
*/
@Override
public File getRelationRelationIndexFile() {
if (relationRelationIndexFile == null) {
relationRelationIndexFile = createTempFile("dsrri");
}
return relationRelationIndexFile;
}
/**
* {@inheritDoc}
*/
@Override
public void close() {
for (File file : allFiles) {
if (!file.delete()) {
log.warning("Unable to delete file " + file);
}
}
}
}