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
54 public class FilterChainImpl implements FilterChain {
55
56 public FilterChainImpl(
57 Portlet portlet, List<? extends PortletFilter> portletFilters) {
58
59 _portlet = portlet;
60
61 if (portletFilters != null) {
62 _portletFilters = portletFilters;
63 }
64 else {
65 _portletFilters = Collections.EMPTY_LIST;
66 }
67 }
68
69 public void doFilter(
70 ActionRequest actionRequest, ActionResponse actionResponse)
71 throws IOException, PortletException {
72
73 if (_portletFilters.size() > _pos) {
74 ActionFilter portletFilter = (ActionFilter)_portletFilters.get(
75 _pos++);
76
77 portletFilter.doFilter(actionRequest, actionResponse, this);
78 }
79 else {
80 _portlet.processAction(actionRequest, actionResponse);
81 }
82 }
83
84 public void doFilter(EventRequest eventRequest, EventResponse eventResponse)
85 throws IOException, PortletException {
86
87 if (_portletFilters.size() > _pos) {
88 EventFilter portletFilter = (EventFilter)_portletFilters.get(
89 _pos++);
90
91 portletFilter.doFilter(eventRequest, eventResponse, this);
92 }
93 else {
94 EventPortlet eventPortlet = (EventPortlet)_portlet;
95
96 eventPortlet.processEvent(eventRequest, eventResponse);
97 }
98 }
99
100 public void doFilter(
101 RenderRequest renderRequest, RenderResponse renderResponse)
102 throws IOException, PortletException {
103
104 if (_portletFilters.size() > _pos) {
105 RenderFilter portletFilter = (RenderFilter)_portletFilters.get(
106 _pos++);
107
108 portletFilter.doFilter(renderRequest, renderResponse, this);
109 }
110 else {
111 _portlet.render(renderRequest, renderResponse);
112 }
113 }
114
115 public void doFilter(
116 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
117 throws IOException, PortletException {
118
119 if (_portletFilters.size() > _pos) {
120 ResourceFilter portletFilter = (ResourceFilter)_portletFilters.get(
121 _pos++);
122
123 portletFilter.doFilter(resourceRequest, resourceResponse, this);
124 }
125 else {
126 ResourceServingPortlet resourceServingPortlet =
127 (ResourceServingPortlet)_portlet;
128
129 resourceServingPortlet.serveResource(
130 resourceRequest, resourceResponse);
131 }
132 }
133
134 private Portlet _portlet;
135 private List<? extends PortletFilter> _portletFilters;
136 private int _pos;
137
138 }