package org.infinispan.filter; import java.io.Serializable; import org.infinispan.marshall.core.ExternalPojo; import org.infinispan.metadata.Metadata; /** * Allows to composite a KeyValueFilter and a Converter together to form a KeyValueFilterConverter. There are no * performance gains by doing this though since the * {@link org.infinispan.filter.CompositeKeyValueFilterConverter#filterAndConvert(Object, Object, org.infinispan.metadata.Metadata)} * just composes of calling the filter and then converter as needed completely invalidating it's usage. This is more * for testing where performance is not of a concern. * * @author wburns * @since 7.0 */ public class CompositeKeyValueFilterConverter<K, V, C> implements KeyValueFilterConverter<K, V, C>, Serializable, ExternalPojo { private final KeyValueFilter<? super K, ? super V> filter; private final Converter<? super K, ? super V, ? extends C> converter; public CompositeKeyValueFilterConverter(KeyValueFilter<? super K, ? super V> filter, Converter<? super K, ? super V, ? extends C> converter) { this.filter = filter; this.converter = converter; } @Override public C filterAndConvert(K key, V value, Metadata metadata) { if (accept(key, value, metadata)) { return convert(key, value, metadata); } else { return null; } } @Override public C convert(K key, V value, Metadata metadata) { return converter.convert(key, value, metadata); } @Override public boolean accept(K key, V value, Metadata metadata) { return filter.accept(key, value, metadata); } }