Package org.openstreetmap.osmosis.pgsnapshot.v0_6.impl

Source Code of org.openstreetmap.osmosis.pgsnapshot.v0_6.impl.PostgreSqlEntityManager

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

import java.util.HashSet;
import java.util.Set;

import org.openstreetmap.osmosis.core.container.v0_6.EntityManager;
import org.openstreetmap.osmosis.core.domain.v0_6.Entity;
import org.openstreetmap.osmosis.core.domain.v0_6.OsmUser;
import org.openstreetmap.osmosis.core.lifecycle.ReleasableIterator;
import org.openstreetmap.osmosis.pgsnapshot.common.NoSuchRecordException;


/**
* Provides postgres entity manager support allowing entities to be manipulated via a common dataset
* interface.
*
* @author Brett Henderson
*
* @param <T>
*            The entity type to be supported.
*/
public class PostgreSqlEntityManager<T extends Entity> implements EntityManager<T> {
 
  private EntityDao<T> entityDao;
  private UserDao userDao;
  private Set<Integer> userSet;
 
 
  /**
   * Creates a new instance.
   *
   * @param entityDao
   *            The dao allowing manipulation of a specific entity type.
   * @param userDao
   *            The user dao allowing user entries to be updated or created.
   */
  public PostgreSqlEntityManager(EntityDao<T> entityDao, UserDao userDao) {
    this.entityDao = entityDao;
    this.userDao = userDao;
   
    userSet = new HashSet<Integer>();
  }
 
 
  /**
   * Writes the specified user to the database.
   *
   * @param user
   *            The user to write.
   */
  private void writeUser(OsmUser user) {
    // Entities without a user assigned should not be written.
    if (!OsmUser.NONE.equals(user)) {
      // Users will only be updated in the database once per changeset
      // run.
      if (!userSet.contains(user.getId())) {
        int userId;
        OsmUser existingUser;

        userId = user.getId();

        try {
          existingUser = userDao.getUser(userId);

          if (!user.equals(existingUser)) {
            userDao.updateUser(user);
          }

        } catch (NoSuchRecordException e) {
          userDao.addUser(user);
        }

        userSet.add(user.getId());
      }
    }
  }
 

  /**
   * {@inheritDoc}
   */
  @Override
  public void addEntity(T entity) {
    writeUser(entity.getUser());
    entityDao.addEntity(entity);
  }

 
  /**
   * {@inheritDoc}
   */
  @Override
  public boolean exists(long id) {
    return entityDao.exists(id);
  }


  /**
   * {@inheritDoc}
   */
  @Override
  public T getEntity(long id) {
    return entityDao.getEntity(id);
  }

 
  /**
   * {@inheritDoc}
   */
  @Override
  public ReleasableIterator<T> iterate() {
    return entityDao.iterate();
  }

 
  /**
   * {@inheritDoc}
   */
  @Override
  public void modifyEntity(T entity) {
    writeUser(entity.getUser());
    entityDao.modifyEntity(entity);
  }

 
  /**
   * {@inheritDoc}
   */
  @Override
  public void removeEntity(long entityId) {
    entityDao.removeEntity(entityId);
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.pgsnapshot.v0_6.impl.PostgreSqlEntityManager

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.