package org.infinispan.distribution.util;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
import org.infinispan.distribution.ch.ConsistentHash;
/**
* Iterator implementation that shows a read only view of the provided iterator by only
* allowing values that map to a given segment using the provided consistent hash.
* <p>
* This iterator is used with specifically with the {@link ReadOnlySegmentAwareEntryCollection}
* to properly filter the entry by the key instead of the entry instance itself.
*
* @author wburns
* @since 7.2
*/
public class ReadOnlySegmentAwareEntryCollection<K, V> extends ReadOnlySegmentAwareCollection<Entry<K, V>> {
public ReadOnlySegmentAwareEntryCollection(Set<Entry<K, V>> set, ConsistentHash ch,
Set<Integer> allowedSegments) {
super(set, ch, allowedSegments);
}
@Override
protected boolean valueAllowed(Object obj) {
if (obj instanceof Entry) {
return super.valueAllowed(((Entry<?, ?>)obj).getKey());
}
return false;
}
@Override
public Iterator<Entry<K, V>> iterator() {
return new ReadOnlySegmentAwareEntryIterator<>(delegate().iterator(), ch,
allowedSegments);
}
}