View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
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          // Optimized to avoid allocations of iterator instances
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 (Exception x)
64          {
65              LOG.info("Exception while notifying listener " + listener, x);
66          }
67      }
68  
69      public void notifyBegin(Request request)
70      {
71          // Optimized to avoid allocations of iterator instances
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 (Exception x)
94          {
95              LOG.info("Exception while notifying listener " + listener, x);
96          }
97      }
98  
99      public void notifyHeaders(Request request)
100     {
101         // Optimized to avoid allocations of iterator instances
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 (Exception x)
124         {
125             LOG.info("Exception while notifying listener " + listener, x);
126         }
127     }
128 
129     public void notifyCommit(Request request)
130     {
131         // Optimized to avoid allocations of iterator instances
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 (Exception x)
154         {
155             LOG.info("Exception while notifying listener " + listener, x);
156         }
157     }
158 
159     public void notifyContent(Request request, ByteBuffer content)
160     {
161         // Optimized to avoid allocations of iterator instances
162         List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
163         for (int i = 0; i < requestListeners.size(); ++i)
164         {
165             Request.RequestListener listener = requestListeners.get(i);
166             if (listener instanceof Request.ContentListener)
167                 notifyContent((Request.ContentListener)listener, request, content);
168         }
169         List<Request.Listener> listeners = client.getRequestListeners();
170         for (int i = 0; i < listeners.size(); ++i)
171         {
172             Request.Listener listener = listeners.get(i);
173             notifyContent(listener, request, content);
174         }
175     }
176 
177     private void notifyContent(Request.ContentListener listener, Request request, ByteBuffer content)
178     {
179         try
180         {
181             listener.onContent(request, content);
182         }
183         catch (Exception x)
184         {
185             LOG.info("Exception while notifying listener " + listener, x);
186         }
187     }
188 
189     public void notifySuccess(Request request)
190     {
191         // Optimized to avoid allocations of iterator instances
192         List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
193         for (int i = 0; i < requestListeners.size(); ++i)
194         {
195             Request.RequestListener listener = requestListeners.get(i);
196             if (listener instanceof Request.SuccessListener)
197                 notifySuccess((Request.SuccessListener)listener, request);
198         }
199         List<Request.Listener> listeners = client.getRequestListeners();
200         for (int i = 0; i < listeners.size(); ++i)
201         {
202             Request.Listener listener = listeners.get(i);
203             notifySuccess(listener, request);
204         }
205     }
206 
207     private void notifySuccess(Request.SuccessListener listener, Request request)
208     {
209         try
210         {
211             listener.onSuccess(request);
212         }
213         catch (Exception x)
214         {
215             LOG.info("Exception while notifying listener " + listener, x);
216         }
217     }
218 
219     public void notifyFailure(Request request, Throwable failure)
220     {
221         // Optimized to avoid allocations of iterator instances
222         List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
223         for (int i = 0; i < requestListeners.size(); ++i)
224         {
225             Request.RequestListener listener = requestListeners.get(i);
226             if (listener instanceof Request.FailureListener)
227                 notifyFailure((Request.FailureListener)listener, request, failure);
228         }
229         List<Request.Listener> listeners = client.getRequestListeners();
230         for (int i = 0; i < listeners.size(); ++i)
231         {
232             Request.Listener listener = listeners.get(i);
233             notifyFailure(listener, request, failure);
234         }
235     }
236 
237     private void notifyFailure(Request.FailureListener listener, Request request, Throwable failure)
238     {
239         try
240         {
241             listener.onFailure(request, failure);
242         }
243         catch (Exception x)
244         {
245             LOG.info("Exception while notifying listener " + listener, x);
246         }
247     }
248 }