// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.pgsnapshot.v0_6.impl; import org.openstreetmap.osmosis.core.domain.v0_6.OsmUser; import org.openstreetmap.osmosis.pgsnapshot.common.DatabaseContext; import org.openstreetmap.osmosis.pgsnapshot.common.NoSuchRecordException; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; /** * Performs all user-specific db operations. * * @author Brett Henderson */ public class UserDao { 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 JdbcTemplate jdbcTemplate; private ActionDao actionDao; private UserRowMapper rowMapper; /** * 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) { this.actionDao = actionDao; jdbcTemplate = dbCtx.getJdbcTemplate(); rowMapper = new UserRowMapper(); } /** * Loads the specified way from the database. * * @param userId * The unique identifier of the user. * @return The loaded user. */ public OsmUser getUser(long userId) { OsmUser user; try { user = jdbcTemplate.queryForObject(SELECT_USER, rowMapper, userId); } catch (EmptyResultDataAccessException e) { throw new NoSuchRecordException("User " + userId + " doesn't exist.", e); } return user; } /** * Adds the specified user to the database. * * @param user * The user to add. */ public void addUser(OsmUser user) { jdbcTemplate.update(INSERT_USER, user.getId(), user.getName()); 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) { jdbcTemplate.update(UPDATE_USER, user.getName(), user.getId()); actionDao.addAction(ActionDataType.USER, ChangesetAction.MODIFY, user.getId()); } }