1
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
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 }