// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.replication.v0_6;
import java.io.File;
import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
import org.openstreetmap.osmosis.core.task.common.RunnableTask;
import org.openstreetmap.osmosis.core.util.FileBasedLock;
import org.openstreetmap.osmosis.core.util.ResourceFileManager;
/**
* Initialises the working directory for the replication file merger task.
*/
public class ReplicationFileMergerInitializer implements RunnableTask {
private static final String LOCK_FILE_NAME = "download.lock";
private static final String CONFIG_FILE_NAME = "configuration.txt";
private static final String CONFIG_RESOURCE = "impl/replicationFileMergerConfiguration.txt";
private static final String DATA_DIRECTORY = "data";
private File workingDirectory;
/**
* Creates a new instance.
*
* @param workingDirectory
* The directory containing configuration and tracking files.
*/
public ReplicationFileMergerInitializer(File workingDirectory) {
this.workingDirectory = workingDirectory;
}
/**
* Initializes a working directory.
*/
private void initializeDirectory() {
File configFile;
File dataDirectory;
ResourceFileManager resourceFileManager;
// Instantiate utility objects.
resourceFileManager = new ResourceFileManager();
// Build file objects from file names.
configFile = new File(workingDirectory, CONFIG_FILE_NAME);
// Copy the template configuration file into the working directory.
if (configFile.exists()) {
throw new OsmosisRuntimeException("Config file " + configFile + " already exists.");
}
resourceFileManager.copyResourceToFile(getClass(), CONFIG_RESOURCE, configFile);
// Create the data directory.
dataDirectory = new File(workingDirectory, DATA_DIRECTORY);
if (dataDirectory.exists()) {
throw new OsmosisRuntimeException("Data directory " + dataDirectory + " already exists.");
}
if (!dataDirectory.mkdir()) {
throw new OsmosisRuntimeException("Unable to create data directory " + dataDirectory + ".");
}
}
/**
* {@inheritDoc}
*/
@Override
public void run() {
FileBasedLock fileLock;
fileLock = new FileBasedLock(new File(workingDirectory, LOCK_FILE_NAME));
try {
fileLock.lock();
initializeDirectory();
fileLock.unlock();
} finally {
fileLock.release();
}
}
}