1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.archive.hcc.util;
24
25 import java.util.LinkedList;
26 import java.util.List;
27
28
29 public class Delegator {
30
31 public enum DelegatorPolicy {
32 ACCEPT_ALL, ACCEPT_FIRST
33 };
34
35 protected List<Delegatable> handlers = new LinkedList<Delegatable>();
36
37 protected DelegatorPolicy policy;
38
39 public Delegator() {
40 this(DelegatorPolicy.ACCEPT_FIRST);
41 }
42
43 public Delegator(DelegatorPolicy policy) {
44 this.policy = policy;
45 }
46
47 public boolean delegate(Object object) {
48 boolean consumedAtLeastOne = false;
49 for (Delegatable h : handlers) {
50 boolean accepted = h.delegate(object);
51 if (accepted) {
52 consumedAtLeastOne = true;
53 }
54 if (accepted && policy == DelegatorPolicy.ACCEPT_FIRST) {
55 return true;
56 }
57 }
58
59 return consumedAtLeastOne;
60
61 }
62
63 public void addDelegatable(Delegatable handler) {
64 this.handlers.add(handler);
65 }
66 }