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.util.List;
22  
23  import org.eclipse.jetty.client.api.Request;
24  import org.eclipse.jetty.util.log.Log;
25  import org.eclipse.jetty.util.log.Logger;
26  
27  public class RequestNotifier
28  {
29      private static final Logger LOG = Log.getLogger(ResponseNotifier.class);
30  
31      private final HttpClient client;
32  
33      public RequestNotifier(HttpClient client)
34      {
35          this.client = client;
36      }
37  
38      public void notifyQueued(Request request)
39      {
40          // Optimized to avoid allocations of iterator instances
41          List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
42          for (int i = 0; i < requestListeners.size(); ++i)
43          {
44              Request.RequestListener listener = requestListeners.get(i);
45              if (listener instanceof Request.QueuedListener)
46                  notifyQueued((Request.QueuedListener)listener, request);
47          }
48          List<Request.Listener> listeners = client.getRequestListeners();
49          for (int i = 0; i < listeners.size(); ++i)
50          {
51              Request.Listener listener = listeners.get(i);
52              notifyQueued(listener, request);
53          }
54      }
55  
56      private void notifyQueued(Request.QueuedListener listener, Request request)
57      {
58          try
59          {
60              listener.onQueued(request);
61          }
62          catch (Exception x)
63          {
64              LOG.info("Exception while notifying listener " + listener, x);
65          }
66      }
67  
68      public void notifyBegin(Request request)
69      {
70          // Optimized to avoid allocations of iterator instances
71          List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
72          for (int i = 0; i < requestListeners.size(); ++i)
73          {
74              Request.RequestListener listener = requestListeners.get(i);
75              if (listener instanceof Request.BeginListener)
76                  notifyBegin((Request.BeginListener)listener, request);
77          }
78          List<Request.Listener> listeners = client.getRequestListeners();
79          for (int i = 0; i < listeners.size(); ++i)
80          {
81              Request.Listener listener = listeners.get(i);
82              notifyBegin(listener, request);
83          }
84      }
85  
86      private void notifyBegin(Request.BeginListener listener, Request request)
87      {
88          try
89          {
90              listener.onBegin(request);
91          }
92          catch (Exception x)
93          {
94              LOG.info("Exception while notifying listener " + listener, x);
95          }
96      }
97  
98      public void notifyHeaders(Request request)
99      {
100         // Optimized to avoid allocations of iterator instances
101         List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
102         for (int i = 0; i < requestListeners.size(); ++i)
103         {
104             Request.RequestListener listener = requestListeners.get(i);
105             if (listener instanceof Request.HeadersListener)
106                 notifyHeaders((Request.HeadersListener)listener, request);
107         }
108         List<Request.Listener> listeners = client.getRequestListeners();
109         for (int i = 0; i < listeners.size(); ++i)
110         {
111             Request.Listener listener = listeners.get(i);
112             notifyHeaders(listener, request);
113         }
114     }
115 
116     private void notifyHeaders(Request.HeadersListener listener, Request request)
117     {
118         try
119         {
120             listener.onHeaders(request);
121         }
122         catch (Exception x)
123         {
124             LOG.info("Exception while notifying listener " + listener, x);
125         }
126     }
127 
128     public void notifyCommit(Request request)
129     {
130         // Optimized to avoid allocations of iterator instances
131         List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
132         for (int i = 0; i < requestListeners.size(); ++i)
133         {
134             Request.RequestListener listener = requestListeners.get(i);
135             if (listener instanceof Request.CommitListener)
136                 notifyCommit((Request.CommitListener)listener, request);
137         }
138         List<Request.Listener> listeners = client.getRequestListeners();
139         for (int i = 0; i < listeners.size(); ++i)
140         {
141             Request.Listener listener = listeners.get(i);
142             notifyCommit(listener, request);
143         }
144     }
145 
146     private void notifyCommit(Request.CommitListener listener, Request request)
147     {
148         try
149         {
150             listener.onCommit(request);
151         }
152         catch (Exception x)
153         {
154             LOG.info("Exception while notifying listener " + listener, x);
155         }
156     }
157 
158     public void notifySuccess(Request request)
159     {
160         // Optimized to avoid allocations of iterator instances
161         List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
162         for (int i = 0; i < requestListeners.size(); ++i)
163         {
164             Request.RequestListener listener = requestListeners.get(i);
165             if (listener instanceof Request.SuccessListener)
166                 notifySuccess((Request.SuccessListener)listener, request);
167         }
168         List<Request.Listener> listeners = client.getRequestListeners();
169         for (int i = 0; i < listeners.size(); ++i)
170         {
171             Request.Listener listener = listeners.get(i);
172             notifySuccess(listener, request);
173         }
174     }
175 
176     private void notifySuccess(Request.SuccessListener listener, Request request)
177     {
178         try
179         {
180             listener.onSuccess(request);
181         }
182         catch (Exception x)
183         {
184             LOG.info("Exception while notifying listener " + listener, x);
185         }
186     }
187 
188     public void notifyFailure(Request request, Throwable failure)
189     {
190         // Optimized to avoid allocations of iterator instances
191         List<Request.RequestListener> requestListeners = request.getRequestListeners(null);
192         for (int i = 0; i < requestListeners.size(); ++i)
193         {
194             Request.RequestListener listener = requestListeners.get(i);
195             if (listener instanceof Request.FailureListener)
196                 notifyFailure((Request.FailureListener)listener, request, failure);
197         }
198         List<Request.Listener> listeners = client.getRequestListeners();
199         for (int i = 0; i < listeners.size(); ++i)
200         {
201             Request.Listener listener = listeners.get(i);
202             notifyFailure(listener, request, failure);
203         }
204     }
205 
206     private void notifyFailure(Request.FailureListener listener, Request request, Throwable failure)
207     {
208         try
209         {
210             listener.onFailure(request, failure);
211         }
212         catch (Exception x)
213         {
214             LOG.info("Exception while notifying listener " + listener, x);
215         }
216     }
217 }