// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.lifecycle;
import java.util.ArrayList;
import java.util.List;
/**
* A container for releasable objects that must be freed. This implementation
* simplifies the creation of many releasable objects that must succeed or fail
* as a group. As each is created they are added to this container, and after
* they're all created successfully they can be cleared from this container.
*
* @author Brett Henderson
*/
public class ReleasableContainer implements Closeable {
private List<Closeable> objects;
/**
* Creates a new instance.
*/
public ReleasableContainer() {
objects = new ArrayList<Closeable>();
}
/**
* Adds a new object to be managed. The object is returned to allow method
* chaining.
*
* @param <T>
* The type of object being stored.
* @param object
* The object to be stored.
* @return The object that was stored.
*/
public <T extends Closeable> T add(T object) {
objects.add(object);
return object;
}
/**
* Removes all objects. They will no longer be released.
*/
public void clear() {
objects.clear();
}
/**
* {@inheritDoc}
*/
@Override
public void close() {
for (Closeable object : objects) {
object.close();
}
objects.clear();
}
}