use of com.hazelcast.spi.impl.eventservice.impl.TrueEventFilter in project hazelcast by hazelcast.
the class QueryCacheNaturalFilteringStrategy method doFilter.
@SuppressWarnings({ "checkstyle:npathcomplexity", "checkstyle:cyclomaticcomplexity" })
@Override
public int doFilter(EventFilter filter, Data dataKey, Object dataOldValue, Object dataValue, EntryEventType eventType, String mapNameOrNull) {
if (filter instanceof MapPartitionLostEventFilter) {
return FILTER_DOES_NOT_MATCH;
}
// Since the event type may change if we have a QueryEventFilter to evaluate,
// the effective event type may change after execution of QueryEventFilter.eval
EventListenerFilter filterAsEventListenerFilter = null;
boolean originalFilterEventTypeMatches = true;
if (filter instanceof EventListenerFilter) {
int type = eventType.getType();
if (type == INVALIDATION.getType()) {
return FILTER_DOES_NOT_MATCH;
}
// evaluate whether the filter matches the original event type
originalFilterEventTypeMatches = filter.eval(type);
// hold a reference to the original event filter; this may be used later, in case there is a query event filter
// and it alters the event type to be published
filterAsEventListenerFilter = ((EventListenerFilter) filter);
filter = ((EventListenerFilter) filter).getEventFilter();
if (filter instanceof UuidFilter) {
return FILTER_DOES_NOT_MATCH;
}
}
if (originalFilterEventTypeMatches && filter instanceof TrueEventFilter) {
return eventType.getType();
}
if (filter instanceof QueryEventFilter) {
int effectiveEventType = processQueryEventFilterWithAlternativeEventType(filter, eventType, dataKey, dataOldValue, dataValue, mapNameOrNull);
if (effectiveEventType == FILTER_DOES_NOT_MATCH) {
return FILTER_DOES_NOT_MATCH;
} else {
// wants to listen for (if effective event type != original event type
if (filterAsEventListenerFilter != null && effectiveEventType != eventType.getType()) {
return filterAsEventListenerFilter.eval(effectiveEventType) ? effectiveEventType : FILTER_DOES_NOT_MATCH;
} else {
return effectiveEventType;
}
}
}
if (filter instanceof EntryEventFilter) {
return (originalFilterEventTypeMatches && processEntryEventFilter(filter, dataKey)) ? eventType.getType() : FILTER_DOES_NOT_MATCH;
}
throw new IllegalArgumentException("Unknown EventFilter type = [" + filter.getClass().getCanonicalName() + "]");
}
use of com.hazelcast.spi.impl.eventservice.impl.TrueEventFilter in project hazelcast by hazelcast.
the class NodeQueryCacheEventService method canPassFilter.
private boolean canPassFilter(LocalEntryEventData localEntryEventData, EventFilter filter) {
if (filter == null || filter instanceof TrueEventFilter) {
return true;
}
NodeEngine nodeEngine = mapServiceContext.getNodeEngine();
SerializationService serializationService = nodeEngine.getSerializationService();
Data keyData = localEntryEventData.getKeyData();
Object value = getValueOrOldValue(localEntryEventData);
QueryableEntry entry = new QueryEntry((InternalSerializationService) serializationService, keyData, value, Extractors.empty());
return filter.eval(entry);
}
Aggregations