// 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;
/**
* Downloads a set of replication files from a HTTP server, and merges them into a
* single output stream. It tracks the intervals covered by the current files
* and stores the current timestamp between invocations forming the basis of a
* replication mechanism.
*
* @author Brett Henderson
*/
public class ReplicationDownloaderInitializer 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/replicationDownloaderConfiguration.txt";
private File workingDirectory;
/**
* Creates a new instance.
*
* @param workingDirectory
* The directory containing configuration and tracking files.
*/
public ReplicationDownloaderInitializer(File workingDirectory) {
this.workingDirectory = workingDirectory;
}
/**
* Initializes a working directory.
*/
private void initializeDirectory() {
File configFile;
ResourceFileManager resourceFileManager;
// Instantiate utility objects.
resourceFileManager = new ResourceFileManager();
// Build file objects from file names.
configFile = new File(workingDirectory, CONFIG_FILE_NAME);
if (configFile.exists()) {
throw new OsmosisRuntimeException("Config file " + CONFIG_FILE_NAME + " already exists.");
}
resourceFileManager.copyResourceToFile(getClass(), CONFIG_RESOURCE, configFile);
}
/**
* {@inheritDoc}
*/
@Override
public void run() {
FileBasedLock fileLock;
fileLock = new FileBasedLock(new File(workingDirectory, LOCK_FILE_NAME));
try {
fileLock.lock();
initializeDirectory();
fileLock.unlock();
} finally {
fileLock.close();
}
}
}