Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 2aa6ec7630b02e4228d370c148589b7780f10e8d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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();

}

Back to the top