1
22
23 package com.liferay.portlet;
24
25 import java.io.IOException;
26
27 import java.util.Collections;
28 import java.util.List;
29
30 import javax.portlet.ActionRequest;
31 import javax.portlet.ActionResponse;
32 import javax.portlet.EventPortlet;
33 import javax.portlet.EventRequest;
34 import javax.portlet.EventResponse;
35 import javax.portlet.Portlet;
36 import javax.portlet.PortletException;
37 import javax.portlet.RenderRequest;
38 import javax.portlet.RenderResponse;
39 import javax.portlet.ResourceRequest;
40 import javax.portlet.ResourceResponse;
41 import javax.portlet.ResourceServingPortlet;
42 import javax.portlet.filter.ActionFilter;
43 import javax.portlet.filter.EventFilter;
44 import javax.portlet.filter.FilterChain;
45 import javax.portlet.filter.PortletFilter;
46 import javax.portlet.filter.RenderFilter;
47 import javax.portlet.filter.ResourceFilter;
48
49
55 public class FilterChainImpl implements FilterChain {
56
57 public FilterChainImpl(
58 Portlet portlet, List<? extends PortletFilter> portletFilters) {
59
60 _portlet = portlet;
61
62 if (portletFilters != null) {
63 _portletFilters = portletFilters;
64 }
65 else {
66 _portletFilters = Collections.EMPTY_LIST;
67 }
68 }
69
70 public void doFilter(
71 ActionRequest actionRequest, ActionResponse actionResponse)
72 throws IOException, PortletException {
73
74 if (_portletFilters.size() > _pos) {
75 ActionFilter portletFilter = (ActionFilter)_portletFilters.get(
76 _pos++);
77
78 portletFilter.doFilter(actionRequest, actionResponse, this);
79 }
80 else {
81 _portlet.processAction(actionRequest, actionResponse);
82 }
83 }
84
85 public void doFilter(EventRequest eventRequest, EventResponse eventResponse)
86 throws IOException, PortletException {
87
88 if (_portletFilters.size() > _pos) {
89 EventFilter portletFilter = (EventFilter)_portletFilters.get(
90 _pos++);
91
92 portletFilter.doFilter(eventRequest, eventResponse, this);
93 }
94 else {
95 EventPortlet eventPortlet = (EventPortlet)_portlet;
96
97 eventPortlet.processEvent(eventRequest, eventResponse);
98 }
99 }
100
101 public void doFilter(
102 RenderRequest renderRequest, RenderResponse renderResponse)
103 throws IOException, PortletException {
104
105 if (_portletFilters.size() > _pos) {
106 RenderFilter portletFilter = (RenderFilter)_portletFilters.get(
107 _pos++);
108
109 portletFilter.doFilter(renderRequest, renderResponse, this);
110 }
111 else {
112 _portlet.render(renderRequest, renderResponse);
113 }
114 }
115
116 public void doFilter(
117 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
118 throws IOException, PortletException {
119
120 if (_portletFilters.size() > _pos) {
121 ResourceFilter portletFilter = (ResourceFilter)_portletFilters.get(
122 _pos++);
123
124 portletFilter.doFilter(resourceRequest, resourceResponse, this);
125 }
126 else {
127 ResourceServingPortlet resourceServingPortlet =
128 (ResourceServingPortlet)_portlet;
129
130 resourceServingPortlet.serveResource(
131 resourceRequest, resourceResponse);
132 }
133 }
134
135 private Portlet _portlet;
136 private List<? extends PortletFilter> _portletFilters;
137 private int _pos;
138
139 }