// 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; /** * Provides functionality common to all entity feature mapper implementations. * * @author Brett Henderson * @param <T> * The type of feature to be built. */ public abstract class EntityFeatureMapper<T> { /** * Returns the name of the entity features entity type. * * @return The parent entity name. */ public abstract String getParentEntityName(); /** * Returns the name of the entity feature. This is used for error messages. * * @return The entity name. */ public abstract String getEntityName(); /** * Provides a default SQL ORDER BY clause suitable for this entity feature. * * @return The ORDER BY clause. */ public String getSqlDefaultOrderBy() { return " ORDER BY entity_id"; } /** * The SQL SELECT statement for retrieving entity feature details. * * @param filterByEntityId * If true, a WHERE clause will be added filtering by the entity * id column. * @param orderBy * If true, a default ORDER BY clause will be added ordering by * the entity id column at a minimum and possibly other fields * depending on implementation. * @return The SQL string. */ public abstract String getSqlSelect(boolean filterByEntityId, boolean orderBy); /** * The SQL INSERT statement for adding features. * * @param rowCount * The number of rows to insert in a single statement. * @return The SQL string. */ public abstract String getSqlInsert(int rowCount); /** * The SQL DELETE statement for deleting entity features. * * @param filterByEntityId * If true, a WHERE clause will be added filtering by the entity * id column. * @return The SQL String. */ public abstract String getSqlDelete(boolean filterByEntityId); /** * Creates a new entity based upon the current row in the result set. * * @param resultSet * The result set to read from. * @return The newly built entity object. */ public abstract T buildEntity(ResultSet resultSet); /** * Sets entity values as bind variable parameters to an entity insert query. * * @param statement * The prepared statement to add the values to. * @param initialIndex * The offset index of the first variable to set. * @param entityFeature * The entity containing the data to be inserted. * @return The current parameter offset. */ public abstract int populateEntityParameters(PreparedStatement statement, int initialIndex, T entityFeature); }