package org.infinispan.stream.impl.termop; import java.util.function.Supplier; import java.util.stream.BaseStream; import java.util.stream.Stream; import org.infinispan.factories.ComponentRegistry; import org.infinispan.stream.impl.intops.IntermediateOperation; /** * Abstract instance that provides common code needed for all terminal operations. Note this class doesn't extend * any interface due to the fact that different terminal operations have possibly different interfaces to implement * however all of them require the information stored here. */ public abstract class BaseTerminalOperation { protected final Iterable<IntermediateOperation> intermediateOperations; protected transient Supplier<? extends BaseStream<?, ?>> supplier; protected BaseTerminalOperation(Iterable<IntermediateOperation> intermediateOperations, Supplier<? extends BaseStream<?, ?>> supplier) { this.intermediateOperations = intermediateOperations; this.supplier = supplier; } public Iterable<IntermediateOperation> getIntermediateOperations() { return intermediateOperations; } public void setSupplier(Supplier<? extends Stream<?>> supplier) { this.supplier = supplier; } public void handleInjection(ComponentRegistry registry) { intermediateOperations.forEach(i -> i.handleInjection(registry)); } }