1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.util;
2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.util.ArrayList;
4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.util.Collection;
5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.util.Iterator;
6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.util.List;
7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom/**
9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * A simple collection backed store.
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */
11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class CollectionStore
12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    implements Store
13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private Collection _local;
15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * Basic constructor.
18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param collection - initial contents for the store, this is copied.
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public CollectionStore(
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        Collection collection)
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        _local = new ArrayList(collection);
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * Return the matches in the collection for the passed in selector.
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param selector the selector to match against.
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @return a possibly empty collection of matching objects.
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public Collection getMatches(Selector selector)
34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (selector == null)
36e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new ArrayList(_local);
38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        else
40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            List col = new ArrayList();
42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            Iterator iter = _local.iterator();
43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            while (iter.hasNext())
45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            {
46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom                Object obj = iter.next();
47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom                if (selector.match(obj))
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom                {
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom                    col.add(obj);
51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom                }
52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            }
53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return col;
55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}
58