// 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 completable objects that require complete and release calls
* to be performed as a unit.
*
* @author Brett Henderson
*/
public class CompletableContainer implements Completable {
private List<Completable> objects;
/**
* Creates a new instance.
*/
public CompletableContainer() {
objects = new ArrayList<Completable>();
}
/**
* 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 Completable> T add(T object) {
objects.add(object);
return object;
}
/**
* {@inheritDoc}
*/
@Override
public void complete() {
for (Completable object : objects) {
object.complete();
}
}
/**
* {@inheritDoc}
*/
@Override
public void close() {
for (Closeable object : objects) {
object.close();
}
}
}