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