1 |
| |
2 |
| |
3 |
| |
4 |
| |
5 |
| |
6 |
| |
7 |
| |
8 |
| |
9 |
| |
10 |
| |
11 |
| |
12 |
| |
13 |
| |
14 |
| |
15 |
| package org.apache.tapestry.listener; |
16 |
| |
17 |
| import java.util.Collection; |
18 |
| import java.util.Collections; |
19 |
| import java.util.HashMap; |
20 |
| import java.util.Map; |
21 |
| |
22 |
| import org.apache.hivemind.ApplicationRuntimeException; |
23 |
| import org.apache.hivemind.util.Defense; |
24 |
| import org.apache.tapestry.IActionListener; |
25 |
| |
26 |
| |
27 |
| |
28 |
| |
29 |
| |
30 |
| public class ListenerMapImpl implements ListenerMap |
31 |
| { |
32 |
| private final Object _target; |
33 |
| |
34 |
| |
35 |
| |
36 |
| |
37 |
| |
38 |
| |
39 |
| private final Map _invokers; |
40 |
| |
41 |
| private final Map _listeners = new HashMap(); |
42 |
| |
43 |
39
| public ListenerMapImpl(Object target, Map invokers)
|
44 |
| { |
45 |
39
| Defense.notNull(target, "target");
|
46 |
39
| Defense.notNull(invokers, "invokers");
|
47 |
| |
48 |
39
| _target = target;
|
49 |
39
| _invokers = invokers;
|
50 |
| } |
51 |
| |
52 |
7
| public boolean canProvideListener(String name)
|
53 |
| { |
54 |
7
| return _invokers.containsKey(name);
|
55 |
| } |
56 |
| |
57 |
42
| public synchronized IActionListener getListener(String name)
|
58 |
| { |
59 |
42
| IActionListener result = (IActionListener) _listeners.get(name);
|
60 |
| |
61 |
42
| if (result == null)
|
62 |
| { |
63 |
39
| result = createListener(name);
|
64 |
38
| _listeners.put(name, result);
|
65 |
| } |
66 |
| |
67 |
41
| return result;
|
68 |
| } |
69 |
| |
70 |
39
| private IActionListener createListener(String name)
|
71 |
| { |
72 |
39
| ListenerMethodInvoker invoker = (ListenerMethodInvoker) _invokers.get(name);
|
73 |
| |
74 |
39
| if (invoker == null)
|
75 |
1
| throw new ApplicationRuntimeException(ListenerMessages.objectMissingMethod(
|
76 |
| _target, |
77 |
| name), _target, null, null); |
78 |
| |
79 |
38
| return new SyntheticListener(_target, invoker);
|
80 |
| } |
81 |
| |
82 |
2
| public Collection getListenerNames()
|
83 |
| { |
84 |
2
| return Collections.unmodifiableCollection(_invokers.keySet());
|
85 |
| } |
86 |
| } |