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 import org.eclipse.jetty.util.log.Logger;
23
24
25
26
27
28
29
30 public class LifeCycleCallbackCollection
31 {
32 private static final Logger LOG = Log.getLogger(LifeCycleCallbackCollection.class);
33
34 public static final String LIFECYCLE_CALLBACK_COLLECTION = "org.eclipse.jetty.lifecyleCallbackCollection";
35
36 private HashMap<String, List<LifeCycleCallback>> postConstructCallbacksMap = new HashMap<String, List<LifeCycleCallback>>();
37 private HashMap<String, List<LifeCycleCallback>> preDestroyCallbacksMap = new HashMap<String, List<LifeCycleCallback>>();
38
39
40
41
42
43
44 public void add (LifeCycleCallback callback)
45 {
46 if ((callback==null) || (callback.getTargetClassName()==null))
47 return;
48
49 if (LOG.isDebugEnabled())
50 LOG.debug("Adding callback for class="+callback.getTargetClass()+ " on "+callback.getTarget());
51 Map<String, List<LifeCycleCallback>> 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 List<LifeCycleCallback> callbacks = map.get(callback.getTargetClassName());
61 if (callbacks==null)
62 {
63 callbacks = new ArrayList<LifeCycleCallback>();
64 map.put(callback.getTargetClassName(), callbacks);
65 }
66
67
68 if (!callbacks.contains(callback))
69 callbacks.add(callback);
70 }
71
72 public List<LifeCycleCallback> getPreDestroyCallbacks (Object o)
73 {
74 if (o == null)
75 return null;
76
77 Class<? extends Object> clazz = o.getClass();
78 return preDestroyCallbacksMap.get(clazz.getName());
79 }
80
81 public List<LifeCycleCallback> getPostConstructCallbacks (Object o)
82 {
83 if (o == null)
84 return null;
85
86 Class<? extends Object> clazz = o.getClass();
87 return postConstructCallbacksMap.get(clazz.getName());
88 }
89
90
91
92
93
94
95
96 public void callPostConstructCallback (Object o)
97 throws Exception
98 {
99 if (o == null)
100 return;
101
102 Class<? extends Object> clazz = o.getClass();
103 List<LifeCycleCallback> callbacks = postConstructCallbacksMap.get(clazz.getName());
104
105 if (callbacks == null)
106 return;
107
108 for (int i=0;i<callbacks.size();i++)
109 {
110 ((LifeCycleCallback)callbacks.get(i)).callback(o);
111 }
112 }
113
114
115
116
117
118
119
120 public void callPreDestroyCallback (Object o)
121 throws Exception
122 {
123 if (o == null)
124 return;
125
126 Class<? extends Object> clazz = o.getClass();
127 List<LifeCycleCallback> callbacks = preDestroyCallbacksMap.get(clazz.getName());
128 if (callbacks == null)
129 return;
130
131 for (int i=0;i<callbacks.size();i++)
132 ((LifeCycleCallback)callbacks.get(i)).callback(o);
133 }
134 }