// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.core.database; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.openstreetmap.osmosis.core.lifecycle.Closeable; /** * A container for database statement objects that must be freed. This * implementation simplifies the management of many statements that must be * released as a group. * * @author Brett Henderson */ public class ReleasableStatementContainer implements Closeable { private static final Logger LOG = Logger.getLogger(ReleasableStatementContainer.class.getName()); private List<Statement> objects; /** * Creates a new instance. */ public ReleasableStatementContainer() { objects = new ArrayList<Statement>(); } /** * Adds a new object to be managed. The object is returned to allow method * chaining. * * @param <T> * The type of statement being stored. * @param statement * The statement to be stored. * @return The statement that was stored. */ public <T extends Statement> T add(T statement) { objects.add(statement); return statement; } /** * Removes all objects. They will no longer be released. */ public void clear() { objects.clear(); } /** * {@inheritDoc} */ @Override public void close() { for (Statement statement : objects) { try { statement.close(); } catch (SQLException e) { // We're inside a release method therefore can't throw an exception. LOG.log(Level.WARNING, "Unable to close database statement.", e); } } objects.clear(); } }