package org.bouncycastle.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
 * A simple collection backed store.
 */
public class CollectionStore<T>
    implements Store<T>, Iterable<T>
{
    private Collection<T> _local;

    /**
     * Basic constructor.
     *
     * @param collection - initial contents for the store, this is copied.
     */
    public CollectionStore(
        Collection<T> collection)
    {
        _local = new ArrayList<T>(collection);
    }

    /**
     * Return the matches in the collection for the passed in selector.
     *
     * @param selector the selector to match against.
     * @return a possibly empty collection of matching objects.
     */
    public Collection<T> getMatches(Selector<T> selector)
    {
        if (selector == null)
        {
            return new ArrayList<T>(_local);
        }
        else
        {
            List<T> col = new ArrayList<T>();
            Iterator<T> iter = _local.iterator();

            while (iter.hasNext())
            {
                T obj = iter.next();

                if (selector.match(obj))
                {
                    col.add(obj);
                }
            }

            return col;
        }
    }

    public Iterator<T> iterator()
    {
        return getMatches(null).iterator();
    }
}
