package org.infinispan.jcache;
import java.util.Iterator;
import javax.cache.event.CacheEntryEvent;
import javax.cache.event.CacheEntryEventFilter;
/**
* An adapter to provide {@link Iterable}s over Cache Entries, those of which
* are filtered using a {@link CacheEntryEventFilter}.
*
* @author Galder ZamarreƱo
* @param <K> the type of keys
* @param <V> the type of values
* @see Class based on the JSR-107 reference implementation (RI) of
* {@link Iterable<CacheEntryEvent<? extends K, ? extends V>>}
*/
public class JCacheEventFilteringIterable<K, V>
implements Iterable<CacheEntryEvent<? extends K, ? extends V>> {
/**
* The underlying {@link Iterable} to filter.
*/
private Iterable<CacheEntryEvent<? extends K, ? extends V>> iterable;
/**
* The filter to apply to entries in the produced {@link Iterator}s.
*/
private CacheEntryEventFilter<? super K, ? super V> filter;
/**
* Constructs an {@link JCacheEventFilteringIterable}.
*
* @param iterable the underlying iterable to filter
* @param filter the filter to apply to entries in the iterable
*/
public JCacheEventFilteringIterable(
Iterable<CacheEntryEvent<? extends K, ? extends V>> iterable,
CacheEntryEventFilter<? super K, ? super V> filter) {
this.iterable = iterable;
this.filter = filter;
}
/**
* {@inheritDoc}
*/
@Override
public Iterator<CacheEntryEvent<? extends K, ? extends V>> iterator() {
return new JCacheEventFilteringIterator<K, V>(
iterable.iterator(), filter);
}
}