package org.infinispan.filter;

import org.infinispan.metadata.Metadata;

/**
 * This is a base class that should be used when implementing a KeyValueFilterConverter that provides default
 * implementations for the {@link org.infinispan.filter.KeyValueFilter#accept(Object, Object, org.infinispan.metadata.Metadata)}
 * and {@link org.infinispan.filter.Converter#convert(Object, Object, org.infinispan.metadata.Metadata)} methods so they just call the
 * {@link org.infinispan.filter.KeyValueFilterConverter#filterAndConvert(Object, Object, org.infinispan.metadata.Metadata)}
 * method and then do the right thing.
 *
 * @author wburns
 * @since 7.0
 */
public abstract class AbstractKeyValueFilterConverter<K, V, C> implements KeyValueFilterConverter<K, V, C> {
   @Override
   public final C convert(K key, V value, Metadata metadata) {
      return filterAndConvert(key, value, metadata);
   }

   @Override
   public final boolean accept(K key, V value, Metadata metadata) {
      return filterAndConvert(key, value, metadata) != null;
   }
}
