Search in sources :

Example 1 with IndexedFilter

use of org.infinispan.notifications.cachelistener.filter.IndexedFilter in project infinispan by infinispan.

the class CacheNotifierImpl method addFilteredListenerInternal.

private <C> CompletionStage<Void> addFilteredListenerInternal(Object listener, DataConversion keyDataConversion, DataConversion valueDataConversion, CacheEventFilter<? super K, ? super V> filter, CacheEventConverter<? super K, ? super V, C> converter, Set<Class<? extends Annotation>> filterAnnotations, boolean useStorageFormat) {
    final Listener l = testListenerClassValidity(listener.getClass());
    final UUID generatedId = Util.threadLocalRandomUUID();
    final CacheMode cacheMode = config.clustering().cacheMode();
    FilterIndexingServiceProvider indexingProvider = null;
    boolean foundMethods = false;
    // We use identity for null as this means it was invoked by a non encoder cache
    DataConversion keyConversion = keyDataConversion == null ? DataConversion.IDENTITY_KEY : keyDataConversion;
    DataConversion valueConversion = valueDataConversion == null ? DataConversion.IDENTITY_VALUE : valueDataConversion;
    if (filter instanceof IndexedFilter) {
        indexingProvider = findIndexingServiceProvider((IndexedFilter) filter);
        if (indexingProvider != null) {
            DelegatingCacheInvocationBuilder builder = new DelegatingCacheInvocationBuilder(indexingProvider);
            adjustCacheInvocationBuilder(builder, filter, converter, filterAnnotations, l, useStorageFormat, generatedId, keyConversion, valueConversion, null);
            foundMethods = validateAndAddFilterListenerInvocations(listener, builder, filterAnnotations);
            builder.registerListenerInvocations();
        }
    }
    if (indexingProvider == null) {
        CacheInvocationBuilder builder = new CacheInvocationBuilder();
        adjustCacheInvocationBuilder(builder, filter, converter, filterAnnotations, l, useStorageFormat, generatedId, keyConversion, valueConversion, null);
        foundMethods = validateAndAddFilterListenerInvocations(listener, builder, filterAnnotations);
    }
    CompletionStage<Void> stage = CompletableFutures.completedNull();
    if (foundMethods && l.clustered()) {
        if (l.observation() == Listener.Observation.PRE) {
            throw CONTAINER.clusterListenerRegisteredWithOnlyPreEvents(listener.getClass());
        } else if (cacheMode.isInvalidation()) {
            throw new UnsupportedOperationException("Cluster listeners cannot be used with Invalidation Caches!");
        } else if (clusterListenerOnPrimaryOnly()) {
            clusterListenerIDs.put(listener, generatedId);
            // This way we only retrieve members of the cache itself
            Address ourAddress = rpcManager.getAddress();
            List<Address> members = rpcManager.getMembers();
            // If we are the only member don't even worry about sending listeners
            if (members != null && members.size() > 1) {
                stage = registerClusterListeners(members, generatedId, ourAddress, filter, converter, l, listener, keyDataConversion, valueDataConversion, useStorageFormat);
            }
        }
    }
    // If we have a segment listener handler, it means we have to do initial state
    QueueingSegmentListener<K, V, ? extends Event<K, V>> handler = segmentHandler.remove(generatedId);
    if (handler != null) {
        if (log.isTraceEnabled()) {
            log.tracef("Listener %s requests initial state for cache", generatedId);
        }
        Collection<IntermediateOperation<?, ?, ?, ?>> intermediateOperations = new ArrayList<>();
        MediaType storage = valueConversion.getStorageMediaType();
        MediaType keyReq = keyConversion.getRequestMediaType();
        MediaType valueReq = valueConversion.getRequestMediaType();
        AdvancedCache advancedCache = cache.running();
        DataConversion chainedKeyDataConversion = advancedCache.getKeyDataConversion();
        DataConversion chainedValueDataConversion = advancedCache.getValueDataConversion();
        if (keyReq != null && valueReq != null) {
            chainedKeyDataConversion = chainedKeyDataConversion.withRequestMediaType(keyReq);
            chainedValueDataConversion = chainedValueDataConversion.withRequestMediaType(valueReq);
        }
        boolean hasFilter = false;
        MediaType filterMediaType = null;
        if (filter != null) {
            hasFilter = true;
            filterMediaType = useStorageFormat ? null : filter.format();
            if (filterMediaType == null) {
                // iterate in the storage format
                chainedKeyDataConversion = chainedKeyDataConversion.withRequestMediaType(storage);
                chainedValueDataConversion = chainedValueDataConversion.withRequestMediaType(storage);
            } else {
                // iterate in the filter format
                chainedKeyDataConversion = chainedKeyDataConversion.withRequestMediaType(filterMediaType);
                chainedValueDataConversion = chainedValueDataConversion.withRequestMediaType(filterMediaType);
            }
        }
        if (converter != null) {
            hasFilter = true;
            filterMediaType = useStorageFormat ? null : converter.format();
            if (filterMediaType == null) {
                // iterate in the storage format
                chainedKeyDataConversion = chainedKeyDataConversion.withRequestMediaType(storage);
                chainedValueDataConversion = chainedValueDataConversion.withRequestMediaType(storage);
            } else {
                // iterate in the filter format
                chainedKeyDataConversion = chainedKeyDataConversion.withRequestMediaType(filterMediaType);
                chainedValueDataConversion = chainedValueDataConversion.withRequestMediaType(filterMediaType);
            }
        }
        if (!Objects.equals(chainedKeyDataConversion, keyDataConversion) || !Objects.equals(chainedValueDataConversion, valueDataConversion)) {
            componentRegistry.wireDependencies(chainedKeyDataConversion, false);
            componentRegistry.wireDependencies(chainedValueDataConversion, false);
            intermediateOperations.add(new MapOperation<>(EncoderEntryMapper.newCacheEntryMapper(chainedKeyDataConversion, chainedValueDataConversion, entryFactory)));
        }
        if (filter instanceof CacheEventFilterConverter && (filter == converter || converter == null)) {
            intermediateOperations.add(new MapOperation<>(CacheFilters.converterToFunction(new CacheEventFilterConverterAsKeyValueFilterConverter<>((CacheEventFilterConverter<?, ?, ?>) filter))));
            intermediateOperations.add(new FilterOperation<>(CacheFilters.notNullCacheEntryPredicate()));
        } else {
            if (filter != null) {
                intermediateOperations.add(new FilterOperation<>(CacheFilters.predicate(new CacheEventFilterAsKeyValueFilter<>(filter))));
            }
            if (converter != null) {
                intermediateOperations.add(new MapOperation<>(CacheFilters.function(new CacheEventConverterAsConverter<>(converter))));
            }
        }
        boolean finalHasFilter = hasFilter;
        MediaType finalFilterMediaType = filterMediaType;
        Function<Object, Object> kc = k -> {
            if (!finalHasFilter)
                return k;
            if (finalFilterMediaType == null || useStorageFormat || keyReq == null) {
                return keyDataConversion.fromStorage(k);
            }
            return encoderRegistry.convert(k, finalFilterMediaType, keyDataConversion.getRequestMediaType());
        };
        Function<Object, Object> kv = v -> {
            if (!finalHasFilter)
                return v;
            if (finalFilterMediaType == null || useStorageFormat || valueReq == null) {
                return valueConversion.fromStorage(v);
            }
            return encoderRegistry.convert(v, finalFilterMediaType, valueConversion.getRequestMediaType());
        };
        stage = handlePublisher(stage, intermediateOperations, handler, generatedId, l, kc, kv);
    }
    return stage;
}
Also used : WriteCommand(org.infinispan.commands.write.WriteCommand) LogFactory(org.infinispan.util.logging.LogFactory) CacheListenerException(org.infinispan.commons.CacheListenerException) Wrapper(org.infinispan.commons.dataconversion.Wrapper) PartitionStatusChanged(org.infinispan.notifications.cachelistener.annotation.PartitionStatusChanged) GlobalConfiguration(org.infinispan.configuration.global.GlobalConfiguration) PersistenceAvailabilityChanged(org.infinispan.notifications.cachelistener.annotation.PersistenceAvailabilityChanged) Scopes(org.infinispan.factories.scopes.Scopes) BasicComponentRegistry(org.infinispan.factories.impl.BasicComponentRegistry) CONTAINER(org.infinispan.util.logging.Log.CONTAINER) AdvancedCache(org.infinispan.AdvancedCache) CACHE_ENTRY_INVALIDATED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_INVALIDATED) TxInvocationContext(org.infinispan.context.impl.TxInvocationContext) CacheEventFilterAsKeyValueFilter(org.infinispan.notifications.cachelistener.filter.CacheEventFilterAsKeyValueFilter) Map(java.util.Map) Transaction(javax.transaction.Transaction) Listener(org.infinispan.notifications.Listener) ClusterEventManager(org.infinispan.notifications.cachelistener.cluster.ClusterEventManager) ConsistentHash(org.infinispan.distribution.ch.ConsistentHash) CacheEntryPassivatedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryPassivatedEvent) Set(java.util.Set) TransactionCompletedEvent(org.infinispan.notifications.cachelistener.event.TransactionCompletedEvent) CacheTopology(org.infinispan.topology.CacheTopology) CACHE_ENTRY_PASSIVATED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_PASSIVATED) CacheEntryLoadedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryLoadedEvent) CACHE_ENTRY_MODIFIED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_MODIFIED) CacheEntryCreated(org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated) CacheEventFilterConverter(org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverter) CacheIntermediatePublisher(org.infinispan.stream.impl.CacheIntermediatePublisher) CompletionStage(java.util.concurrent.CompletionStage) TRANSACTION_REGISTERED(org.infinispan.notifications.cachelistener.event.Event.Type.TRANSACTION_REGISTERED) DataConversion(org.infinispan.encoding.DataConversion) AsyncInterceptorChain(org.infinispan.interceptors.AsyncInterceptorChain) AvailabilityMode(org.infinispan.partitionhandling.AvailabilityMode) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) CacheEntryRemoved(org.infinispan.notifications.cachelistener.annotation.CacheEntryRemoved) TopologyChanged(org.infinispan.notifications.cachelistener.annotation.TopologyChanged) CacheEventFilterConverterAsKeyValueFilterConverter(org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverterAsKeyValueFilterConverter) CacheEntryPassivated(org.infinispan.notifications.cachelistener.annotation.CacheEntryPassivated) CacheEntryInvalidated(org.infinispan.notifications.cachelistener.annotation.CacheEntryInvalidated) CacheEntriesEvictedEvent(org.infinispan.notifications.cachelistener.event.CacheEntriesEvictedEvent) CacheEntryVisitedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryVisitedEvent) CACHE_ENTRY_EXPIRED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_EXPIRED) PersistenceAvailabilityChangedEvent(org.infinispan.notifications.cachelistener.event.PersistenceAvailabilityChangedEvent) AbstractListenerImpl(org.infinispan.notifications.impl.AbstractListenerImpl) SegmentPublisherSupplier(org.infinispan.reactive.publisher.impl.SegmentPublisherSupplier) EnumUtil(org.infinispan.commons.util.EnumUtil) ArrayList(java.util.ArrayList) Start(org.infinispan.factories.annotations.Start) PARTITION_STATUS_CHANGED(org.infinispan.notifications.cachelistener.event.Event.Type.PARTITION_STATUS_CHANGED) CacheFilters(org.infinispan.filter.CacheFilters) CACHE_ENTRY_REMOVED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_REMOVED) EventType(org.infinispan.notifications.cachelistener.filter.EventType) ClusterExecutor(org.infinispan.manager.ClusterExecutor) TransactionCompleted(org.infinispan.notifications.cachelistener.annotation.TransactionCompleted) PublisherTransformers(org.infinispan.reactive.publisher.PublisherTransformers) Address(org.infinispan.remoting.transport.Address) Transcoder(org.infinispan.commons.dataconversion.Transcoder) CACHE_ENTRY_CREATED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_CREATED) InternalEntryFactory(org.infinispan.container.impl.InternalEntryFactory) CacheEntry(org.infinispan.container.entries.CacheEntry) CacheEventFilter(org.infinispan.notifications.cachelistener.filter.CacheEventFilter) ClusterListenerReplicateCallable(org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable) TOPOLOGY_CHANGED(org.infinispan.notifications.cachelistener.event.Event.Type.TOPOLOGY_CHANGED) Inject(org.infinispan.factories.annotations.Inject) PERSISTENCE_AVAILABILITY_CHANGED(org.infinispan.notifications.cachelistener.event.Event.Type.PERSISTENCE_AVAILABILITY_CHANGED) CacheEntryInvalidatedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryInvalidatedEvent) ClusterEvent(org.infinispan.notifications.cachelistener.cluster.ClusterEvent) CacheEntryEvent(org.infinispan.notifications.cachelistener.event.CacheEntryEvent) CacheEventConverterAsConverter(org.infinispan.notifications.cachelistener.filter.CacheEventConverterAsConverter) GlobalTransaction(org.infinispan.transaction.xa.GlobalTransaction) Event(org.infinispan.notifications.cachelistener.event.Event) CACHE_ENTRY_LOADED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_LOADED) DataRehashedEvent(org.infinispan.notifications.cachelistener.event.DataRehashedEvent) SuspectException(org.infinispan.remoting.transport.jgroups.SuspectException) AggregateCompletionStage(org.infinispan.util.concurrent.AggregateCompletionStage) TransactionRegisteredEvent(org.infinispan.notifications.cachelistener.event.TransactionRegisteredEvent) ClusterListenerRemoveCallable(org.infinispan.notifications.cachelistener.cluster.ClusterListenerRemoveCallable) MapOperation(org.infinispan.stream.impl.intops.object.MapOperation) CACHE_ENTRY_EVICTED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_EVICTED) CacheEntryModifiedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryModifiedEvent) IndexedFilter(org.infinispan.notifications.cachelistener.filter.IndexedFilter) InvocationContext(org.infinispan.context.InvocationContext) ComponentRef(org.infinispan.factories.impl.ComponentRef) CompletableFutures(org.infinispan.util.concurrent.CompletableFutures) CacheEntryRemovedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryRemovedEvent) DeliveryGuarantee(org.infinispan.reactive.publisher.impl.DeliveryGuarantee) FilterOperation(org.infinispan.stream.impl.intops.object.FilterOperation) Scope(org.infinispan.factories.scopes.Scope) TriConsumer(org.infinispan.util.function.TriConsumer) CACHE_ENTRY_VISITED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_VISITED) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) CacheEventConverter(org.infinispan.notifications.cachelistener.filter.CacheEventConverter) UUID(java.util.UUID) CacheEntryExpired(org.infinispan.notifications.cachelistener.annotation.CacheEntryExpired) Objects(java.util.Objects) List(java.util.List) TRANSACTION_COMPLETED(org.infinispan.notifications.cachelistener.event.Event.Type.TRANSACTION_COMPLETED) ClusterPublisherManager(org.infinispan.reactive.publisher.impl.ClusterPublisherManager) Annotation(java.lang.annotation.Annotation) TransactionRegistered(org.infinispan.notifications.cachelistener.annotation.TransactionRegistered) FilterIndexingServiceProvider(org.infinispan.notifications.cachelistener.filter.FilterIndexingServiceProvider) EventImpl(org.infinispan.notifications.cachelistener.event.impl.EventImpl) CacheEntryLoaded(org.infinispan.notifications.cachelistener.annotation.CacheEntryLoaded) FlagAffectedCommand(org.infinispan.commands.FlagAffectedCommand) ClusterCacheNotifier(org.infinispan.notifications.cachelistener.cluster.ClusterCacheNotifier) DataRehashed(org.infinispan.notifications.cachelistener.annotation.DataRehashed) CommandInvocationId(org.infinispan.commands.CommandInvocationId) ServiceFinder(org.infinispan.commons.util.ServiceFinder) HashMap(java.util.HashMap) Metadata(org.infinispan.metadata.Metadata) Function(java.util.function.Function) ConcurrentMap(java.util.concurrent.ConcurrentMap) HashSet(java.util.HashSet) FlagBitSets(org.infinispan.context.impl.FlagBitSets) DATA_REHASHED(org.infinispan.notifications.cachelistener.event.Event.Type.DATA_REHASHED) MediaType(org.infinispan.commons.dataconversion.MediaType) CacheEntryVisited(org.infinispan.notifications.cachelistener.annotation.CacheEntryVisited) CacheEntryExpiredEvent(org.infinispan.notifications.cachelistener.event.CacheEntryExpiredEvent) KeyPartitioner(org.infinispan.distribution.ch.KeyPartitioner) IntermediateOperation(org.infinispan.stream.impl.intops.IntermediateOperation) CacheEntryModified(org.infinispan.notifications.cachelistener.annotation.CacheEntryModified) Log(org.infinispan.util.logging.Log) SegmentSpecificCommand(org.infinispan.commands.SegmentSpecificCommand) EncoderRegistry(org.infinispan.marshall.core.EncoderRegistry) CACHE_ENTRY_ACTIVATED(org.infinispan.notifications.cachelistener.event.Event.Type.CACHE_ENTRY_ACTIVATED) ClusteringDependentLogic(org.infinispan.interceptors.locking.ClusteringDependentLogic) CacheEntriesEvicted(org.infinispan.notifications.cachelistener.annotation.CacheEntriesEvicted) CacheException(org.infinispan.commons.CacheException) Flowable(io.reactivex.rxjava3.core.Flowable) DelegatingCacheEntryListenerInvocation(org.infinispan.notifications.cachelistener.filter.DelegatingCacheEntryListenerInvocation) ListenerInvocation(org.infinispan.notifications.impl.ListenerInvocation) Util(org.infinispan.commons.util.Util) CacheEntryActivated(org.infinispan.notifications.cachelistener.annotation.CacheEntryActivated) PartitionStatusChangedEvent(org.infinispan.notifications.cachelistener.event.PartitionStatusChangedEvent) RpcManager(org.infinispan.remoting.rpc.RpcManager) Completable(io.reactivex.rxjava3.core.Completable) CacheEntryActivatedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryActivatedEvent) RemoteClusterListener(org.infinispan.notifications.cachelistener.cluster.RemoteClusterListener) TopologyChangedEvent(org.infinispan.notifications.cachelistener.event.TopologyChangedEvent) Status(javax.transaction.Status) CacheMode(org.infinispan.configuration.cache.CacheMode) EncoderEntryMapper(org.infinispan.cache.impl.EncoderEntryMapper) Configuration(org.infinispan.configuration.cache.Configuration) TransactionManager(javax.transaction.TransactionManager) CacheEntryCreatedEvent(org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent) Listener(org.infinispan.notifications.Listener) RemoteClusterListener(org.infinispan.notifications.cachelistener.cluster.RemoteClusterListener) Address(org.infinispan.remoting.transport.Address) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ArrayList(java.util.ArrayList) CacheMode(org.infinispan.configuration.cache.CacheMode) DataConversion(org.infinispan.encoding.DataConversion) MediaType(org.infinispan.commons.dataconversion.MediaType) AdvancedCache(org.infinispan.AdvancedCache) UUID(java.util.UUID) IntermediateOperation(org.infinispan.stream.impl.intops.IntermediateOperation) IndexedFilter(org.infinispan.notifications.cachelistener.filter.IndexedFilter) FilterIndexingServiceProvider(org.infinispan.notifications.cachelistener.filter.FilterIndexingServiceProvider) CacheEventFilterConverter(org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverter)

Example 2 with IndexedFilter

use of org.infinispan.notifications.cachelistener.filter.IndexedFilter in project infinispan by infinispan.

the class CacheNotifierImpl method addListenerInternal.

private <C> CompletionStage<Void> addListenerInternal(Object listener, DataConversion keyDataConversion, DataConversion valueDataConversion, CacheEventFilter<? super K, ? super V> filter, CacheEventConverter<? super K, ? super V, C> converter, ClassLoader classLoader, boolean useStorageFormat) {
    final Listener l = testListenerClassValidity(listener.getClass());
    final UUID generatedId = Util.threadLocalRandomUUID();
    final CacheMode cacheMode = config.clustering().cacheMode();
    FilterIndexingServiceProvider indexingProvider = null;
    boolean foundMethods = false;
    // We use identity for null as this means it was invoked by a non encoder cache
    DataConversion keyConversion = keyDataConversion == null ? DataConversion.IDENTITY_KEY : keyDataConversion;
    DataConversion valueConversion = valueDataConversion == null ? DataConversion.IDENTITY_VALUE : valueDataConversion;
    Set<Class<? extends Annotation>> filterAnnotations = findListenerCallbacks(listener);
    if (filter instanceof IndexedFilter) {
        indexingProvider = findIndexingServiceProvider((IndexedFilter) filter);
        if (indexingProvider != null) {
            DelegatingCacheInvocationBuilder builder = new DelegatingCacheInvocationBuilder(indexingProvider);
            adjustCacheInvocationBuilder(builder, filter, converter, filterAnnotations, l, useStorageFormat, generatedId, keyConversion, valueConversion, classLoader);
            foundMethods = validateAndAddListenerInvocations(listener, builder);
            builder.registerListenerInvocations();
        }
    }
    if (indexingProvider == null) {
        CacheInvocationBuilder builder = new CacheInvocationBuilder();
        adjustCacheInvocationBuilder(builder, filter, converter, filterAnnotations, l, useStorageFormat, generatedId, keyConversion, valueConversion, classLoader);
        foundMethods = validateAndAddListenerInvocations(listener, builder);
    }
    CompletionStage<Void> stage = CompletableFutures.completedNull();
    if (foundMethods && l.clustered()) {
        if (l.observation() == Listener.Observation.PRE) {
            throw CONTAINER.clusterListenerRegisteredWithOnlyPreEvents(listener.getClass());
        } else if (cacheMode.isInvalidation()) {
            throw new UnsupportedOperationException("Cluster listeners cannot be used with Invalidation Caches!");
        } else if (clusterListenerOnPrimaryOnly()) {
            clusterListenerIDs.put(listener, generatedId);
            Address ourAddress;
            List<Address> members;
            if (rpcManager != null) {
                ourAddress = rpcManager.getAddress();
                members = rpcManager.getMembers();
            } else {
                ourAddress = null;
                members = null;
            }
            // If we are the only member don't even worry about sending listeners
            if (members != null && members.size() > 1) {
                stage = registerClusterListeners(members, generatedId, ourAddress, filter, converter, l, listener, keyDataConversion, valueDataConversion, useStorageFormat);
            }
        }
    }
    // If we have a segment listener handler, it means we have to do initial state
    QueueingSegmentListener<K, V, ? extends Event<K, V>> handler = segmentHandler.remove(generatedId);
    if (handler != null) {
        if (log.isTraceEnabled()) {
            log.tracef("Listener %s requests initial state for cache", generatedId);
        }
        Collection<IntermediateOperation<?, ?, ?, ?>> intermediateOperations = new ArrayList<>();
        if (keyDataConversion != DataConversion.IDENTITY_KEY && valueDataConversion != DataConversion.IDENTITY_VALUE) {
            intermediateOperations.add(new MapOperation<>(EncoderEntryMapper.newCacheEntryMapper(keyDataConversion, valueDataConversion, entryFactory)));
        }
        if (filter instanceof CacheEventFilterConverter && (filter == converter || converter == null)) {
            intermediateOperations.add(new MapOperation<>(CacheFilters.converterToFunction(new CacheEventFilterConverterAsKeyValueFilterConverter<>((CacheEventFilterConverter<?, ?, ?>) filter))));
            intermediateOperations.add(new FilterOperation<>(CacheFilters.notNullCacheEntryPredicate()));
        } else {
            if (filter != null) {
                intermediateOperations.add(new FilterOperation<>(CacheFilters.predicate(new CacheEventFilterAsKeyValueFilter<>(filter))));
            }
            if (converter != null) {
                intermediateOperations.add(new MapOperation<>(CacheFilters.function(new CacheEventConverterAsConverter<>(converter))));
            }
        }
        stage = handlePublisher(stage, intermediateOperations, handler, generatedId, l, null, null);
    }
    return stage;
}
Also used : Listener(org.infinispan.notifications.Listener) RemoteClusterListener(org.infinispan.notifications.cachelistener.cluster.RemoteClusterListener) Address(org.infinispan.remoting.transport.Address) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ArrayList(java.util.ArrayList) CacheMode(org.infinispan.configuration.cache.CacheMode) DataConversion(org.infinispan.encoding.DataConversion) UUID(java.util.UUID) IntermediateOperation(org.infinispan.stream.impl.intops.IntermediateOperation) IndexedFilter(org.infinispan.notifications.cachelistener.filter.IndexedFilter) Annotation(java.lang.annotation.Annotation) FilterIndexingServiceProvider(org.infinispan.notifications.cachelistener.filter.FilterIndexingServiceProvider) CacheEventFilterConverter(org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverter)

Aggregations

Annotation (java.lang.annotation.Annotation)2 ArrayList (java.util.ArrayList)2 UUID (java.util.UUID)2 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)2 CacheMode (org.infinispan.configuration.cache.CacheMode)2 DataConversion (org.infinispan.encoding.DataConversion)2 Listener (org.infinispan.notifications.Listener)2 RemoteClusterListener (org.infinispan.notifications.cachelistener.cluster.RemoteClusterListener)2 CacheEventFilterConverter (org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverter)2 FilterIndexingServiceProvider (org.infinispan.notifications.cachelistener.filter.FilterIndexingServiceProvider)2 IndexedFilter (org.infinispan.notifications.cachelistener.filter.IndexedFilter)2 Address (org.infinispan.remoting.transport.Address)2 IntermediateOperation (org.infinispan.stream.impl.intops.IntermediateOperation)2 Completable (io.reactivex.rxjava3.core.Completable)1 Flowable (io.reactivex.rxjava3.core.Flowable)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1