Package org.openstreetmap.osmosis.pgsimple.v0_6.impl

Source Code of org.openstreetmap.osmosis.pgsimple.v0_6.impl.UserDao

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

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
import org.openstreetmap.osmosis.core.domain.v0_6.OsmUser;
import org.openstreetmap.osmosis.pgsimple.common.BaseDao;
import org.openstreetmap.osmosis.pgsimple.common.DatabaseContext;
import org.openstreetmap.osmosis.pgsimple.common.NoSuchRecordException;


/**
* Performs all user-specific db operations.
*
* @author Brett Henderson
*/
public class UserDao extends BaseDao {
  private static final Logger LOG = Logger.getLogger(UserDao.class.getName());
  private static final String SELECT_USER = "SELECT id, name FROM users WHERE id = ?";
  private static final String INSERT_USER = "INSERT INTO users(id, name) VALUES(?, ?)";
  private static final String UPDATE_USER = "UPDATE users SET name = ? WHERE id = ?";
 
  private PreparedStatement selectUserStatement;
  private PreparedStatement insertUserStatement;
  private PreparedStatement updateUserStatement;
  private ActionDao actionDao;
 
 
  /**
   * Creates a new instance.
   *
   * @param dbCtx
   *            The database context to use for accessing the database.
   * @param actionDao
   *            The dao to use for adding action records to the database.
   */
  public UserDao(DatabaseContext dbCtx, ActionDao actionDao) {
    super(dbCtx);
   
    this.actionDao = actionDao;
  }
 
 
  /**
   * Builds a user from the current result set row.
   *
   * @param resultSet
   *            The result set.
   * @return The newly loaded user.
   */
  private OsmUser buildUser(ResultSet resultSet) {
    try {
      return new OsmUser(
        resultSet.getInt("id"),
        resultSet.getString("name")
      );
     
    } catch (SQLException e) {
      throw new OsmosisRuntimeException("Unable to build a user from the current recordset row.", e);
    }
  }
 
 
  /**
   * Loads the specified way from the database.
   *
   * @param userId
   *            The unique identifier of the user.
   * @return The loaded user.
   */
  public OsmUser getUser(long userId) {
    ResultSet resultSet = null;
    OsmUser user;
   
    if (selectUserStatement == null) {
      selectUserStatement = prepareStatement(SELECT_USER);
    }
   
    try {
      selectUserStatement.setLong(1, userId);
     
      resultSet = selectUserStatement.executeQuery();
     
      if (!resultSet.next()) {
        throw new NoSuchRecordException("User " + userId + " doesn't exist.");
      }
      user = buildUser(resultSet);
     
      resultSet.close();
      resultSet = null;
     
      return user;
     
    } catch (SQLException e) {
      throw new OsmosisRuntimeException("Query failed for user " + userId + ".");
    } finally {
      if (resultSet != null) {
        try {
          resultSet.close();
        } catch (SQLException e) {
          // We are already in an error condition so log and continue.
          LOG.log(Level.WARNING, "Unable to close the result set.", e);
        }
      }
    }
  }
 
 
  /**
   * Adds the specified user to the database.
   *
   * @param user
   *            The user to add.
   */
  public void addUser(OsmUser user) {
    int prmIndex;
   
    if (insertUserStatement == null) {
      insertUserStatement = prepareStatement(INSERT_USER);
    }
   
    prmIndex = 1;
   
    try {
      insertUserStatement.setInt(prmIndex++, user.getId());
      insertUserStatement.setString(prmIndex++, user.getName());
     
      insertUserStatement.executeUpdate();
     
    } catch (SQLException e) {
      throw new OsmosisRuntimeException(
        "Unable to insert user " + user.getId() + ".", e);
    }
   
    actionDao.addAction(ActionDataType.USER, ChangesetAction.CREATE, user.getId());
  }
 
 
  /**
   * Updates the specified user record in the database.
   *
   * @param user
   *            The user to update.
   */
  public void updateUser(OsmUser user) {
    int prmIndex;
   
    if (updateUserStatement == null) {
      updateUserStatement = prepareStatement(UPDATE_USER);
    }
   
    prmIndex = 1;
    try {
      updateUserStatement.setString(prmIndex++, user.getName());
      updateUserStatement.setInt(prmIndex++, user.getId());
     
      updateUserStatement.executeUpdate();
     
    } catch (SQLException e) {
      throw new OsmosisRuntimeException(
        "Unable to update user " + user.getId() + ".", e);
    }
   
    actionDao.addAction(ActionDataType.USER, ChangesetAction.MODIFY, user.getId());
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.pgsimple.v0_6.impl.UserDao

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.