Package org.openstreetmap.osmosis.replication.v0_6

Source Code of org.openstreetmap.osmosis.replication.v0_6.IntervalDownloaderInitializer

// 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 java.util.Date;

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;
import org.openstreetmap.osmosis.replication.common.TimestampTracker;


/**
* Downloads a set of change 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 IntervalDownloaderInitializer implements RunnableTask {
 
  private static final String LOCK_FILE_NAME = "download.lock";
  private static final String CONFIG_FILE_NAME = "configuration.txt";
  private static final String TSTAMP_FILE_NAME = "timestamp.txt";
  private static final String TSTAMP_NEW_FILE_NAME = "timestamp-new.txt";
  private static final String CONFIG_RESOURCE = "impl/intervalConfiguration.txt";
 
 
  private File workingDirectory;
  private Date initialDate;
 
 
  /**
   * Creates a new instance.
   *
   * @param workingDirectory
   *            The directory containing configuration and tracking files.
   * @param initialDate
   *            The date to begin changeset downloads from.
   */
  public IntervalDownloaderInitializer(File workingDirectory, Date initialDate) {
    this.workingDirectory = workingDirectory;
    this.initialDate = initialDate;
  }
 
 
  /**
   * Initializes a working directory.
   */
  private void initializeDirectory() {
    File configFile;
    File timestampFile;
    File newTimestampFile;
   
    ResourceFileManager resourceFileManager;
   
    // Instantiate utility objects.
    resourceFileManager = new ResourceFileManager();
   
    // Build file objects from file names.
    configFile = new File(workingDirectory, CONFIG_FILE_NAME);
    timestampFile = new File(workingDirectory, TSTAMP_FILE_NAME);
    newTimestampFile = new File(workingDirectory, TSTAMP_NEW_FILE_NAME);
   
    if (configFile.exists()) {
      throw new OsmosisRuntimeException("Config file " + CONFIG_FILE_NAME + " already exists.");
    }
    resourceFileManager.copyResourceToFile(getClass(), CONFIG_RESOURCE, configFile);
   
    if (timestampFile.exists()) {
      throw new OsmosisRuntimeException("Timestamp file " + TSTAMP_FILE_NAME + " already exists.");
    }
   
    new TimestampTracker(timestampFile, newTimestampFile).setTime(initialDate);
  }
 
 
  /**
   * {@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();
    }
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.replication.v0_6.IntervalDownloaderInitializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.