// 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.SQLException; import org.openstreetmap.osmosis.core.OsmosisRuntimeException; import org.openstreetmap.osmosis.pgsimple.common.BaseDao; import org.openstreetmap.osmosis.pgsimple.common.DatabaseContext; /** * Performs all action db operations. * * @author Brett Henderson */ public class ActionDao extends BaseDao { private static final String SQL_INSERT = "INSERT INTO actions(data_type, action, id) VALUES(?, ?, ?)"; private static final String SQL_TRUNCATE = "TRUNCATE actions"; private boolean enabled; private DatabaseCapabilityChecker capabilityChecker; private PreparedStatement insertStatement; private PreparedStatement truncateStatement; /** * Creates a new instance. * * @param dbCtx * The database context to use for accessing the database. */ public ActionDao(DatabaseContext dbCtx) { this(dbCtx, true); capabilityChecker = new DatabaseCapabilityChecker(dbCtx); } /** * Creates a new instance. * * @param dbCtx * The database context to use for accessing the database. * @param enabled * Action records will only be written if this is set to true. */ public ActionDao(DatabaseContext dbCtx, boolean enabled) { super(dbCtx); this.enabled = enabled; } /** * Adds the specified action to the database. * * @param dataType The type of data being represented by this action. * @param action The action being performed on the data. * @param id The identifier of the data. */ public void addAction(ActionDataType dataType, ChangesetAction action, long id) { if (enabled && capabilityChecker.isActionSupported()) { int prmIndex; if (insertStatement == null) { insertStatement = prepareStatement(SQL_INSERT); } prmIndex = 1; try { insertStatement.setString(prmIndex++, dataType.getDatabaseValue()); insertStatement.setString(prmIndex++, action.getDatabaseValue()); insertStatement.setLong(prmIndex++, id); insertStatement.executeUpdate(); } catch (SQLException e) { throw new OsmosisRuntimeException( "Unable to insert action with type=" + dataType + ", action=" + action + " and id=" + id + ".", e); } } } /** * Removes all action records. */ public void truncate() { if (enabled && capabilityChecker.isActionSupported()) { if (truncateStatement == null) { truncateStatement = prepareStatement(SQL_TRUNCATE); } try { truncateStatement.executeUpdate(); } catch (SQLException e) { throw new OsmosisRuntimeException( "Truncate failed for actions.", e ); } } } }