1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.client;
20
21 import java.nio.ByteBuffer;
22 import java.util.List;
23
24 import org.eclipse.jetty.client.api.Request;
25 import org.eclipse.jetty.util.log.Log;
26 import org.eclipse.jetty.util.log.Logger;
27
28 public class RequestNotifier
29 {
30 private static final Logger LOG = Log.getLogger(ResponseNotifier.class);
31
32 private final HttpClient client;
33
34 public RequestNotifier(HttpClient client)
35 {
36 this.client = client;
37 }
38
39 public void notifyQueued(Request request)
40 {
41
42 List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
43 for (int i = 0; i < requestListeners.size(); ++i)
44 {
45 Request.RequestListener listener = requestListeners.get(i);
46 if (listener instanceof Request.QueuedListener)
47 notifyQueued((Request.QueuedListener)listener, request);
48 }
49 List<Request.Listener> listeners = client.getRequestListeners();
50 for (int i = 0; i < listeners.size(); ++i)
51 {
52 Request.Listener listener = listeners.get(i);
53 notifyQueued(listener, request);
54 }
55 }
56
57 private void notifyQueued(Request.QueuedListener listener, Request request)
58 {
59 try
60 {
61 listener.onQueued(request);
62 }
63 catch (Throwable x)
64 {
65 LOG.info("Exception while notifying listener " + listener, x);
66 }
67 }
68
69 public void notifyBegin(Request request)
70 {
71
72 List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
73 for (int i = 0; i < requestListeners.size(); ++i)
74 {
75 Request.RequestListener listener = requestListeners.get(i);
76 if (listener instanceof Request.BeginListener)
77 notifyBegin((Request.BeginListener)listener, request);
78 }
79 List<Request.Listener> listeners = client.getRequestListeners();
80 for (int i = 0; i < listeners.size(); ++i)
81 {
82 Request.Listener listener = listeners.get(i);
83 notifyBegin(listener, request);
84 }
85 }
86
87 private void notifyBegin(Request.BeginListener listener, Request request)
88 {
89 try
90 {
91 listener.onBegin(request);
92 }
93 catch (Throwable x)
94 {
95 LOG.info("Exception while notifying listener " + listener, x);
96 }
97 }
98
99 public void notifyHeaders(Request request)
100 {
101
102 List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
103 for (int i = 0; i < requestListeners.size(); ++i)
104 {
105 Request.RequestListener listener = requestListeners.get(i);
106 if (listener instanceof Request.HeadersListener)
107 notifyHeaders((Request.HeadersListener)listener, request);
108 }
109 List<Request.Listener> listeners = client.getRequestListeners();
110 for (int i = 0; i < listeners.size(); ++i)
111 {
112 Request.Listener listener = listeners.get(i);
113 notifyHeaders(listener, request);
114 }
115 }
116
117 private void notifyHeaders(Request.HeadersListener listener, Request request)
118 {
119 try
120 {
121 listener.onHeaders(request);
122 }
123 catch (Throwable x)
124 {
125 LOG.info("Exception while notifying listener " + listener, x);
126 }
127 }
128
129 public void notifyCommit(Request request)
130 {
131
132 List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
133 for (int i = 0; i < requestListeners.size(); ++i)
134 {
135 Request.RequestListener listener = requestListeners.get(i);
136 if (listener instanceof Request.CommitListener)
137 notifyCommit((Request.CommitListener)listener, request);
138 }
139 List<Request.Listener> listeners = client.getRequestListeners();
140 for (int i = 0; i < listeners.size(); ++i)
141 {
142 Request.Listener listener = listeners.get(i);
143 notifyCommit(listener, request);
144 }
145 }
146
147 private void notifyCommit(Request.CommitListener listener, Request request)
148 {
149 try
150 {
151 listener.onCommit(request);
152 }
153 catch (Throwable x)
154 {
155 LOG.info("Exception while notifying listener " + listener, x);
156 }
157 }
158
159 public void notifyContent(Request request, ByteBuffer content)
160 {
161
162 content = content.slice();
163 if (!content.hasRemaining())
164 return;
165
166 List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
167 for (int i = 0; i < requestListeners.size(); ++i)
168 {
169 Request.RequestListener listener = requestListeners.get(i);
170 if (listener instanceof Request.ContentListener)
171 {
172
173
174 content.clear();
175 notifyContent((Request.ContentListener)listener, request, content);
176 }
177 }
178 List<Request.Listener> listeners = client.getRequestListeners();
179 for (int i = 0; i < listeners.size(); ++i)
180 {
181 Request.Listener listener = listeners.get(i);
182
183
184 content.clear();
185 notifyContent(listener, request, content);
186 }
187 }
188
189 private void notifyContent(Request.ContentListener listener, Request request, ByteBuffer content)
190 {
191 try
192 {
193 listener.onContent(request, content);
194 }
195 catch (Throwable x)
196 {
197 LOG.info("Exception while notifying listener " + listener, x);
198 }
199 }
200
201 public void notifySuccess(Request request)
202 {
203
204 List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
205 for (int i = 0; i < requestListeners.size(); ++i)
206 {
207 Request.RequestListener listener = requestListeners.get(i);
208 if (listener instanceof Request.SuccessListener)
209 notifySuccess((Request.SuccessListener)listener, request);
210 }
211 List<Request.Listener> listeners = client.getRequestListeners();
212 for (int i = 0; i < listeners.size(); ++i)
213 {
214 Request.Listener listener = listeners.get(i);
215 notifySuccess(listener, request);
216 }
217 }
218
219 private void notifySuccess(Request.SuccessListener listener, Request request)
220 {
221 try
222 {
223 listener.onSuccess(request);
224 }
225 catch (Throwable x)
226 {
227 LOG.info("Exception while notifying listener " + listener, x);
228 }
229 }
230
231 public void notifyFailure(Request request, Throwable failure)
232 {
233
234 List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
235 for (int i = 0; i < requestListeners.size(); ++i)
236 {
237 Request.RequestListener listener = requestListeners.get(i);
238 if (listener instanceof Request.FailureListener)
239 notifyFailure((Request.FailureListener)listener, request, failure);
240 }
241 List<Request.Listener> listeners = client.getRequestListeners();
242 for (int i = 0; i < listeners.size(); ++i)
243 {
244 Request.Listener listener = listeners.get(i);
245 notifyFailure(listener, request, failure);
246 }
247 }
248
249 private void notifyFailure(Request.FailureListener listener, Request request, Throwable failure)
250 {
251 try
252 {
253 listener.onFailure(request, failure);
254 }
255 catch (Throwable x)
256 {
257 LOG.info("Exception while notifying listener " + listener, x);
258 }
259 }
260 }