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
33 private HashMap<String, List<LifeCycleCallback>> postConstructCallbacksMap = new HashMap<String, List<LifeCycleCallback>>();
34 private HashMap<String, List<LifeCycleCallback>> preDestroyCallbacksMap = new HashMap<String, List<LifeCycleCallback>>();
35
36
37
38
39
40
41 public void add (LifeCycleCallback callback)
42 {
43 if ((callback==null) || (callback.getTargetClassName()==null))
44 return;
45
46 if (Log.isDebugEnabled())
47 Log.debug("Adding callback for class="+callback.getTargetClass()+ " on "+callback.getTarget());
48 Map<String, List<LifeCycleCallback>> map = null;
49 if (callback instanceof PreDestroyCallback)
50 map = preDestroyCallbacksMap;
51 if (callback instanceof PostConstructCallback)
52 map = postConstructCallbacksMap;
53
54 if (map == null)
55 throw new IllegalArgumentException ("Unsupported lifecycle callback type: "+callback);
56
57 List<LifeCycleCallback> callbacks = map.get(callback.getTargetClassName());
58 if (callbacks==null)
59 {
60 callbacks = new ArrayList<LifeCycleCallback>();
61 map.put(callback.getTargetClassName(), callbacks);
62 }
63
64
65 if (!callbacks.contains(callback))
66 callbacks.add(callback);
67 }
68
69 public List<LifeCycleCallback> getPreDestroyCallbacks (Object o)
70 {
71 if (o == null)
72 return null;
73
74 Class clazz = o.getClass();
75 return preDestroyCallbacksMap.get(clazz.getName());
76 }
77
78 public List<LifeCycleCallback> getPostConstructCallbacks (Object o)
79 {
80 if (o == null)
81 return null;
82
83 Class clazz = o.getClass();
84 return postConstructCallbacksMap.get(clazz.getName());
85 }
86
87
88
89
90
91
92
93 public void callPostConstructCallback (Object o)
94 throws Exception
95 {
96 if (o == null)
97 return;
98
99 Class clazz = o.getClass();
100 List<LifeCycleCallback> callbacks = postConstructCallbacksMap.get(clazz.getName());
101
102 if (callbacks == null)
103 return;
104
105 for (int i=0;i<callbacks.size();i++)
106 {
107 ((LifeCycleCallback)callbacks.get(i)).callback(o);
108 }
109 }
110
111
112
113
114
115
116
117 public void callPreDestroyCallback (Object o)
118 throws Exception
119 {
120 if (o == null)
121 return;
122
123 Class clazz = o.getClass();
124 List<LifeCycleCallback> callbacks = preDestroyCallbacksMap.get(clazz.getName());
125 if (callbacks == null)
126 return;
127
128 for (int i=0;i<callbacks.size();i++)
129 ((LifeCycleCallback)callbacks.get(i)).callback(o);
130 }
131 }