use of com.hazelcast.map.impl.query.QueryEventFilter in project hazelcast by hazelcast.
the class MapAddEntryListenerToKeyWithPredicateMessageTask method getEventFilter.
@Override
protected EventFilter getEventFilter() {
Predicate predicate = serializationService.toObject(parameters.predicate);
QueryEventFilter eventFilter = new QueryEventFilter(parameters.key, predicate, parameters.includeValue);
return new EventListenerFilter(parameters.listenerFlags, eventFilter);
}
use of com.hazelcast.map.impl.query.QueryEventFilter in project hazelcast by hazelcast.
the class DefaultQueryCache method addEntryListener.
@Override
public UUID addEntryListener(MapListener listener, Predicate<K, V> predicate, boolean includeValue) {
checkNotNull(listener, "listener cannot be null");
checkNotNull(predicate, "predicate cannot be null");
QueryCacheEventService eventService = getEventService();
EventFilter filter = new QueryEventFilter(null, predicate, includeValue);
String mapName = delegate.getName();
return eventService.addListener(mapName, cacheId, listener, filter);
}
use of com.hazelcast.map.impl.query.QueryEventFilter in project hazelcast by hazelcast.
the class DefaultQueryCache method addEntryListener.
@Override
public UUID addEntryListener(MapListener listener, Predicate<K, V> predicate, K key, boolean includeValue) {
checkNotNull(listener, "listener cannot be null");
checkNotNull(predicate, "predicate cannot be null");
checkNotNull(key, "key cannot be null");
QueryCacheEventService eventService = getEventService();
EventFilter filter = new QueryEventFilter(toData(key), predicate, includeValue);
String mapName = delegate.getName();
return eventService.addListener(mapName, cacheId, listener, filter);
}
use of com.hazelcast.map.impl.query.QueryEventFilter in project hazelcast by hazelcast.
the class PartitionAccumulatorRegistry method createEventFilter.
private EventFilter createEventFilter() {
boolean includeValue = info.isIncludeValue();
Predicate predicate = info.getPredicate();
return new QueryEventFilter(null, predicate, includeValue);
}
use of com.hazelcast.map.impl.query.QueryEventFilter in project hazelcast by hazelcast.
the class QueryCacheNaturalFilteringStrategy method doFilter.
@SuppressWarnings({ "checkstyle:npathcomplexity", "checkstyle:cyclomaticcomplexity" })
@Override
public int doFilter(EventFilter filter, Data dataKey, Object oldValue, 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 (filter instanceof TrueEventFilter) {
return originalFilterEventTypeMatches ? eventType.getType() : FILTER_DOES_NOT_MATCH;
}
if (filter instanceof QueryEventFilter) {
int effectiveEventType = processQueryEventFilterWithAlternativeEventType(filter, eventType, dataKey, oldValue, 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() + "]");
}
Aggregations