1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portlet;
16  
17  import java.io.IOException;
18  
19  import java.util.Collections;
20  import java.util.List;
21  
22  import javax.portlet.ActionRequest;
23  import javax.portlet.ActionResponse;
24  import javax.portlet.EventPortlet;
25  import javax.portlet.EventRequest;
26  import javax.portlet.EventResponse;
27  import javax.portlet.Portlet;
28  import javax.portlet.PortletException;
29  import javax.portlet.RenderRequest;
30  import javax.portlet.RenderResponse;
31  import javax.portlet.ResourceRequest;
32  import javax.portlet.ResourceResponse;
33  import javax.portlet.ResourceServingPortlet;
34  import javax.portlet.filter.ActionFilter;
35  import javax.portlet.filter.EventFilter;
36  import javax.portlet.filter.FilterChain;
37  import javax.portlet.filter.PortletFilter;
38  import javax.portlet.filter.RenderFilter;
39  import javax.portlet.filter.ResourceFilter;
40  
41  /**
42   * <a href="FilterChainImpl.java.html"><b><i>View Source</i></b></a>
43   *
44   * @author Brian Wing Shun Chan
45   */
46  public class FilterChainImpl implements FilterChain {
47  
48      public FilterChainImpl(
49          Portlet portlet, List<? extends PortletFilter> portletFilters) {
50  
51          _portlet = portlet;
52  
53          if (portletFilters != null) {
54              _portletFilters = portletFilters;
55          }
56          else {
57              _portletFilters = Collections.EMPTY_LIST;
58          }
59      }
60  
61      public void doFilter(
62              ActionRequest actionRequest, ActionResponse actionResponse)
63          throws IOException, PortletException {
64  
65          if (_portletFilters.size() > _pos) {
66              ActionFilter portletFilter = (ActionFilter)_portletFilters.get(
67                  _pos++);
68  
69              portletFilter.doFilter(actionRequest, actionResponse, this);
70          }
71          else {
72              _portlet.processAction(actionRequest, actionResponse);
73          }
74      }
75  
76      public void doFilter(EventRequest eventRequest, EventResponse eventResponse)
77          throws IOException, PortletException {
78  
79          if (_portletFilters.size() > _pos) {
80              EventFilter portletFilter = (EventFilter)_portletFilters.get(
81                  _pos++);
82  
83              portletFilter.doFilter(eventRequest, eventResponse, this);
84          }
85          else {
86              EventPortlet eventPortlet = (EventPortlet)_portlet;
87  
88              eventPortlet.processEvent(eventRequest, eventResponse);
89          }
90      }
91  
92      public void doFilter(
93              RenderRequest renderRequest, RenderResponse renderResponse)
94          throws IOException, PortletException {
95  
96          if (_portletFilters.size() > _pos) {
97              RenderFilter portletFilter = (RenderFilter)_portletFilters.get(
98                  _pos++);
99  
100             portletFilter.doFilter(renderRequest, renderResponse, this);
101         }
102         else {
103             _portlet.render(renderRequest, renderResponse);
104         }
105     }
106 
107     public void doFilter(
108             ResourceRequest resourceRequest, ResourceResponse resourceResponse)
109         throws IOException, PortletException {
110 
111         if (_portletFilters.size() > _pos) {
112             ResourceFilter portletFilter = (ResourceFilter)_portletFilters.get(
113                 _pos++);
114 
115             portletFilter.doFilter(resourceRequest, resourceResponse, this);
116         }
117         else {
118             ResourceServingPortlet resourceServingPortlet =
119                 (ResourceServingPortlet)_portlet;
120 
121             resourceServingPortlet.serveResource(
122                 resourceRequest, resourceResponse);
123         }
124     }
125 
126     private Portlet _portlet;
127     private List<? extends PortletFilter> _portletFilters;
128     private int _pos;
129 
130 }