blob: 2aa6ec7630b02e4228d370c148589b7780f10e8d [file] [log] [blame]
package org.osgi.util.pushstream;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
/**
* Create a buffered section of a Push-based stream
*
* @param <R> The type of object being built
* @param <T> The type of objects in the {@link PushEvent}
* @param <U> The type of the Queue used in the user specified buffer
*/
public interface BufferBuilder<R, T, U extends BlockingQueue<PushEvent<? extends T>>> {
/**
* The BlockingQueue implementation to use as a buffer
*
* @param queue
* @return this builder
*/
BufferBuilder<R, T, U> withBuffer(U queue);
/**
* Set the {@link QueuePolicy} of this Builder
*
* @param queuePolicy
* @return this builder
*/
BufferBuilder<R,T,U> withQueuePolicy(QueuePolicy<T,U> queuePolicy);
/**
* Set the {@link QueuePolicy} of this Builder
*
* @param queuePolicyOption
* @return this builder
*/
BufferBuilder<R, T, U> withQueuePolicy(QueuePolicyOption queuePolicyOption);
/**
* Set the {@link PushbackPolicy} of this builder
*
* @param pushbackPolicy
* @return this builder
*/
BufferBuilder<R, T, U> withPushbackPolicy(PushbackPolicy<T, U> pushbackPolicy);
/**
* Set the {@link PushbackPolicy} of this builder
*
* @param pushbackPolicyOption
* @param time
* @return this builder
*/
BufferBuilder<R, T, U> withPushbackPolicy(PushbackPolicyOption pushbackPolicyOption, long time);
/**
* Set the maximum permitted number of concurrent event deliveries allowed
* from this buffer
*
* @param parallelism
* @return this builder
*/
BufferBuilder<R, T, U> withParallelism(int parallelism);
/**
* Set the {@link Executor} that should be used to deliver events from this
* buffer
*
* @param executor
* @return this builder
*/
BufferBuilder<R, T, U> withExecutor(Executor executor);
/**
* @return the object being built
*/
R create();
}