Package org.openstreetmap.osmosis.apidb.v0_6

Source Code of org.openstreetmap.osmosis.apidb.v0_6.ApidbFileReplicator

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

import org.openstreetmap.osmosis.apidb.common.DatabaseContext2;
import org.openstreetmap.osmosis.apidb.v0_6.impl.AllEntityDao;
import org.openstreetmap.osmosis.apidb.v0_6.impl.ReplicationSource;
import org.openstreetmap.osmosis.apidb.v0_6.impl.Replicator;
import org.openstreetmap.osmosis.apidb.v0_6.impl.SchemaVersionValidator;
import org.openstreetmap.osmosis.apidb.v0_6.impl.SystemTimeLoader;
import org.openstreetmap.osmosis.apidb.v0_6.impl.TimeDao;
import org.openstreetmap.osmosis.apidb.v0_6.impl.TransactionDao;
import org.openstreetmap.osmosis.apidb.v0_6.impl.TransactionManager;
import org.openstreetmap.osmosis.core.database.DatabaseLoginCredentials;
import org.openstreetmap.osmosis.core.database.DatabasePreferences;
import org.openstreetmap.osmosis.core.task.v0_6.ChangeSink;
import org.openstreetmap.osmosis.core.task.v0_6.RunnableChangeSource;


/**
* Performs replication from an API database into change files.
*/
public class ApidbFileReplicator implements RunnableChangeSource {
 
  private DatabaseLoginCredentials loginCredentials;
  private DatabasePreferences preferences;
  private int iterations;
  private int minInterval;
  private int maxInterval;
  private ChangeSink changeSink;
 
 
  /**
   * Creates a new instance.
   *
   * @param loginCredentials
   *            Contains all information required to connect to the database.
   * @param preferences
   *            Contains preferences configuring database behaviour.
   * @param iterations
   *            The number of replication intervals to execute. 0 means
   *            infinite.
   * @param minInterval
   *            The minimum number of milliseconds between intervals.
   * @param maxInterval
   *            The maximum number of milliseconds between intervals if no new
   *            data is available. This isn't a hard limit because proces
   */
    public ApidbFileReplicator(DatabaseLoginCredentials loginCredentials, DatabasePreferences preferences,
            int iterations, int minInterval, int maxInterval) {
      this.loginCredentials = loginCredentials;
      this.preferences = preferences;
      this.iterations = iterations;
      this.minInterval = minInterval;
      this.maxInterval = maxInterval;
    }


    /**
   * {@inheritDoc}
   */
  @Override
  public void setChangeSink(ChangeSink changeSink) {
    this.changeSink = changeSink;
  }
   
   
    /**
   * Runs the task implementation. This is called by the run method within a transaction.
   *
   * @param dbCtx
   *            Used to access the database.
   */
    protected void runImpl(DatabaseContext2 dbCtx) {
    Replicator replicator;
    ReplicationSource source;
    TransactionManager txnSnapshotLoader;
    SystemTimeLoader systemTimeLoader;
   
    new SchemaVersionValidator(loginCredentials, preferences)
        .validateVersion(ApidbVersionConstants.SCHEMA_MIGRATIONS);
   
    source = new AllEntityDao(dbCtx.getJdbcTemplate());
    txnSnapshotLoader = new TransactionDao(dbCtx);
    systemTimeLoader = new TimeDao(dbCtx.getJdbcTemplate());
   
    replicator = new Replicator(source, changeSink, txnSnapshotLoader, systemTimeLoader, iterations, minInterval,
        maxInterval);
   
    replicator.replicate();
    }


  /**
   * {@inheritDoc}
   */
  @Override
  public void run() {
        final DatabaseContext2 dbCtx = new DatabaseContext2(loginCredentials);
     
        try {
          runImpl(dbCtx);

        } finally {
            dbCtx.release();
        }
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.apidb.v0_6.ApidbFileReplicator

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.