package org.infinispan.objectfilter.impl;
import java.util.Map;
import org.infinispan.objectfilter.ObjectFilter;
import org.infinispan.objectfilter.impl.predicateindex.MatcherEvalContext;
import org.infinispan.objectfilter.impl.syntax.parser.IckleParsingResult;
/**
* A filter that accepts all inputs of a given type. Does not support sorting and projections.
*
* @author anistor@redhat.com
* @since 9.0
*/
final class AcceptObjectFilter<TypeMetadata, AttributeMetadata, AttributeId extends Comparable<AttributeId>>
extends ObjectFilterBase<TypeMetadata> implements ObjectFilter {
private final BaseMatcher<TypeMetadata, AttributeMetadata, AttributeId> matcher;
private final MetadataAdapter<TypeMetadata, AttributeMetadata, AttributeId> metadataAdapter;
AcceptObjectFilter(Map<String, Object> namedParameters,
BaseMatcher<TypeMetadata, AttributeMetadata, AttributeId> matcher,
MetadataAdapter<TypeMetadata, AttributeMetadata, AttributeId> metadataAdapter,
IckleParsingResult<TypeMetadata> parsingResult) {
super(parsingResult, namedParameters);
this.matcher = matcher;
this.metadataAdapter = metadataAdapter;
}
@Override
public ObjectFilter withParameters(Map<String, Object> namedParameters) {
validateParameters(namedParameters);
return new AcceptObjectFilter<>(namedParameters, matcher, metadataAdapter, parsingResult);
}
@Override
public FilterResult filter(Object instance) {
if (instance == null) {
throw new IllegalArgumentException("instance cannot be null");
}
MatcherEvalContext<TypeMetadata, AttributeMetadata, AttributeId> matcherEvalContext = matcher.startSingleTypeContext(null, null, instance, metadataAdapter);
if (matcherEvalContext != null) {
// once we have a successfully created context we already have a match as there are no filter conditions except for entity type
return new FilterResultImpl(matcher.convert(instance), null, null);
}
return null;
}
}