Package org.openstreetmap.osmosis.extract.apidb.v0_6

Source Code of org.openstreetmap.osmosis.extract.apidb.v0_6.IntervalExtractor

// This software is released into the Public Domain.  See copying.txt for details.
package org.openstreetmap.osmosis.extract.apidb.v0_6;

import java.io.File;
import java.util.Date;

import org.openstreetmap.osmosis.apidb.v0_6.ApidbChangeReader;
import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
import org.openstreetmap.osmosis.core.sort.v0_6.ChangeTagSorter;
import org.openstreetmap.osmosis.extract.apidb.common.Configuration;
import org.openstreetmap.osmosis.replication.v0_6.impl.ChangesetFileNameFormatter;
import org.openstreetmap.osmosis.xml.common.CompressionMethod;
import org.openstreetmap.osmosis.xml.v0_6.XmlChangeWriter;


/**
* Performs an extract from a database for a single time interval and writes to a change file.
*
* @author Brett Henderson
*/
public class IntervalExtractor {

  private static final String TMP_FILE_NAME = "tmpchangeset.osc.gz";
  private final Configuration config;
  private final File baseDirectory;
  private final Date intervalBegin;
  private final Date intervalEnd;
  private final boolean fullHistory;


  /**
   * Creates a new instance.
   *
   * @param config
   *            The configuration object defining runtime parameters.
   * @param baseDirectory
   *            The root of the changeset extraction directory tree.
   * @param intervalBegin
   *            The beginning of the interval to extract.
   * @param intervalEnd
   *            The end of the interval to extract.
   * @param fullHistory
   *            Specifies if full version history should be returned, or just a single change per
   *            entity for the interval.
   */
  public IntervalExtractor(Configuration config, File baseDirectory, Date intervalBegin, Date intervalEnd,
      boolean fullHistory) {
    this.baseDirectory = baseDirectory;
    this.config = config;
    this.intervalBegin = intervalBegin;
    this.intervalEnd = intervalEnd;
    this.fullHistory = fullHistory;
  }


  /**
   * Runs the changeset extraction.
   */
  public void run() {
    ApidbChangeReader reader;
    XmlChangeWriter writer;
    ChangeTagSorter tagSorter;
    String fileName;
    File tmpFile;
    File file;

    // Generate the changeset file name.
    fileName = new ChangesetFileNameFormatter(config.getChangeFileBeginFormat(), config.getChangeFileEndFormat())
        .generateFileName(intervalBegin, intervalEnd);

    // Generate the temporary output file.
    tmpFile = new File(baseDirectory, TMP_FILE_NAME);

    // Generate the changeset output file.
    file = new File(baseDirectory, fileName);

    // Create the output task to write to a compressed xml file.
    writer = new XmlChangeWriter(tmpFile, CompressionMethod.GZip);

    // Create the input task to read the change interval from the database.
    reader = new ApidbChangeReader(config.getDatabaseLoginCredentials(), config.getDatabasePreferences(),
        intervalBegin, intervalEnd, fullHistory);
   
    // Create the tag sorter to ensure that output files are consistent allowing simple
    // comparisons when auditing results.
    tagSorter = new ChangeTagSorter();

    // Connect the tasks together.
    reader.setChangeSink(tagSorter);
    tagSorter.setChangeSink(writer);

    // Run the changeset extraction.
    reader.run();

    // Delete the destination file if it already exists.
    if (file.exists()) {
      if (!file.delete()) {
        throw new OsmosisRuntimeException("Unable to delete existing file " + file + ".");
      }
    }

    // Rename the temporary file to the final file name.
    if (!tmpFile.renameTo(file)) {
      throw new OsmosisRuntimeException("Unable to rename temporary file " + tmpFile + " to " + file + ".");
    }
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.extract.apidb.v0_6.IntervalExtractor

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.