1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.plus.annotation;
15
16 import java.util.ArrayList;
17 import java.util.HashMap;
18 import java.util.List;
19 import java.util.Map;
20
21 import org.eclipse.jetty.util.log.Log;
22
23
24
25
26
27
28
29 public class LifeCycleCallbackCollection
30 {
31 public static final String LIFECYCLE_CALLBACK_COLLECTION = "org.eclipse.jetty.lifecyleCallbackCollection";
32 private HashMap postConstructCallbacksMap = new HashMap();
33 private HashMap preDestroyCallbacksMap = new HashMap();
34
35
36
37
38
39
40
41
42
43
44 public void add (LifeCycleCallback callback)
45 {
46 if ((callback==null) || (callback.getTargetClass()==null) || (callback.getTarget()==null))
47 return;
48
49 if (Log.isDebugEnabled())
50 Log.debug("Adding callback for class="+callback.getTargetClass()+ " on "+callback.getTarget());
51 Map map = null;
52 if (callback instanceof PreDestroyCallback)
53 map = preDestroyCallbacksMap;
54 if (callback instanceof PostConstructCallback)
55 map = postConstructCallbacksMap;
56
57 if (map == null)
58 throw new IllegalArgumentException ("Unsupported lifecycle callback type: "+callback);
59
60
61 List callbacks = (List)map.get(callback.getTargetClass());
62 if (callbacks==null)
63 {
64 callbacks = new ArrayList();
65 map.put(callback.getTargetClass(), callbacks);
66 }
67
68
69 if (!callbacks.contains(callback))
70 callbacks.add(callback);
71 }
72
73 public List getPreDestroyCallbacks (Object o)
74 {
75 if (o == null)
76 return null;
77
78 Class clazz = o.getClass();
79 return (List)preDestroyCallbacksMap.get(clazz);
80 }
81
82 public List getPostConstructCallbacks (Object o)
83 {
84 if (o == null)
85 return null;
86
87 Class clazz = o.getClass();
88 return (List)postConstructCallbacksMap.get(clazz);
89 }
90
91
92
93
94
95
96
97 public void callPostConstructCallback (Object o)
98 throws Exception
99 {
100 if (o == null)
101 return;
102
103 Class clazz = o.getClass();
104 List callbacks = (List)postConstructCallbacksMap.get(clazz);
105
106 if (callbacks == null)
107 return;
108
109 for (int i=0;i<callbacks.size();i++)
110 ((LifeCycleCallback)callbacks.get(i)).callback(o);
111 }
112
113
114
115
116
117
118
119 public void callPreDestroyCallback (Object o)
120 throws Exception
121 {
122 if (o == null)
123 return;
124
125 Class clazz = o.getClass();
126 List callbacks = (List)preDestroyCallbacksMap.get(clazz);
127 if (callbacks == null)
128 return;
129
130 for (int i=0;i<callbacks.size();i++)
131 ((LifeCycleCallback)callbacks.get(i)).callback(o);
132 }
133 }