1 package com.github.triceo.splitlog.api;
2
3 import java.util.Collection;
4
5 /**
6 * Follower that is capable of merging multiple {@link Follower}s.
7 *
8 * They receive all messages that their {@link #getMerged()} receive. It is left
9 * to the discretion of users to {@link #waitFor(MidDeliveryMessageCondition)}
10 * any message or just for messages from a particular {@link MessageProducer}.
11 *
12 * Unlike {@link Follower}, this one can not tag. However, it will retrieve
13 * every tag that has been made using any of the {@link #getMerged()}.
14 *
15 */
16 public interface MergingFollower extends CommonFollower<MergingFollower, Follower> {
17
18 /**
19 * Retrieve followers that are currently part of this merge.
20 *
21 * @return Unmodifiable collections of followers in this merge.
22 */
23 Collection<Follower> getMerged();
24
25 /**
26 * Will return an instance whose {@link #getMerged()} does not contain the
27 * given follower.
28 *
29 * @param f
30 * The follower to remove from the merge.
31 * @return New instance of the follower containing the followers without
32 * this one, if {@link #getMerged()} contained it. If it didn't, the
33 * same instance is returned. Null is returned when the merge would
34 * be empty after this call.
35 */
36 MergingFollower remove(Follower f);
37
38 /**
39 * Will remove the follower from {@link #getMerged()}. As a result, this
40 * merge will act as if it never knew of this follower.
41 *
42 * It is the responsibility of this method to notify the {@link Follower} to
43 * no longer notify of new messages.
44 *
45 * @param f
46 * The follower to remove from the merge.
47 * @return True if the follower was part of the merge, false if it was
48 * already separate or never merged.
49 */
50 @Deprecated
51 boolean separate(Follower f);
52
53 }