Search in sources :

Example 1 with EntryEventFilter

use of com.hazelcast.map.impl.EntryEventFilter 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() + "]");
}
Also used : UuidFilter(com.hazelcast.map.impl.nearcache.invalidation.UuidFilter) QueryEventFilter(com.hazelcast.map.impl.query.QueryEventFilter) EntryEventFilter(com.hazelcast.map.impl.EntryEventFilter) MapPartitionLostEventFilter(com.hazelcast.map.impl.MapPartitionLostEventFilter) EventListenerFilter(com.hazelcast.map.impl.EventListenerFilter) TrueEventFilter(com.hazelcast.spi.impl.eventservice.impl.TrueEventFilter)

Example 2 with EntryEventFilter

use of com.hazelcast.map.impl.EntryEventFilter in project hazelcast by hazelcast.

the class AbstractQueryCacheConfigurator method setEntryListener.

protected void setEntryListener(String mapName, String cacheName, QueryCacheConfig config) {
    for (EntryListenerConfig listenerConfig : config.getEntryListenerConfigs()) {
        MapListener listener = getListener(listenerConfig);
        if (listener != null) {
            EventFilter filter = new EntryEventFilter(listenerConfig.isIncludeValue(), null);
            eventService.addListener(mapName, cacheName, listener, filter);
        }
    }
}
Also used : MapListener(com.hazelcast.map.listener.MapListener) EntryEventFilter(com.hazelcast.map.impl.EntryEventFilter) EntryListenerConfig(com.hazelcast.config.EntryListenerConfig) EntryEventFilter(com.hazelcast.map.impl.EntryEventFilter) EventFilter(com.hazelcast.spi.EventFilter)

Example 3 with EntryEventFilter

use of com.hazelcast.map.impl.EntryEventFilter in project hazelcast by hazelcast.

the class DefaultQueryCache method addEntryListenerInternal.

private String addEntryListenerInternal(MapListener listener, K key, boolean includeValue) {
    checkNotNull(listener, "listener cannot be null");
    Data keyData = toData(key);
    EventFilter filter = new EntryEventFilter(includeValue, keyData);
    QueryCacheEventService eventService = getEventService();
    String mapName = delegate.getName();
    return eventService.addListener(mapName, cacheName, listener, filter);
}
Also used : QueryCacheEventService(com.hazelcast.map.impl.querycache.QueryCacheEventService) EntryEventFilter(com.hazelcast.map.impl.EntryEventFilter) Data(com.hazelcast.nio.serialization.Data) EntryEventFilter(com.hazelcast.map.impl.EntryEventFilter) QueryEventFilter(com.hazelcast.map.impl.query.QueryEventFilter) EventFilter(com.hazelcast.spi.EventFilter)

Aggregations

EntryEventFilter (com.hazelcast.map.impl.EntryEventFilter)3 QueryEventFilter (com.hazelcast.map.impl.query.QueryEventFilter)2 EventFilter (com.hazelcast.spi.EventFilter)2 EntryListenerConfig (com.hazelcast.config.EntryListenerConfig)1 EventListenerFilter (com.hazelcast.map.impl.EventListenerFilter)1 MapPartitionLostEventFilter (com.hazelcast.map.impl.MapPartitionLostEventFilter)1 UuidFilter (com.hazelcast.map.impl.nearcache.invalidation.UuidFilter)1 QueryCacheEventService (com.hazelcast.map.impl.querycache.QueryCacheEventService)1 MapListener (com.hazelcast.map.listener.MapListener)1 Data (com.hazelcast.nio.serialization.Data)1 TrueEventFilter (com.hazelcast.spi.impl.eventservice.impl.TrueEventFilter)1