001
014
015 package com.liferay.portlet;
016
017 import java.io.IOException;
018
019 import java.util.Collections;
020 import java.util.List;
021
022 import javax.portlet.ActionRequest;
023 import javax.portlet.ActionResponse;
024 import javax.portlet.EventPortlet;
025 import javax.portlet.EventRequest;
026 import javax.portlet.EventResponse;
027 import javax.portlet.Portlet;
028 import javax.portlet.PortletException;
029 import javax.portlet.RenderRequest;
030 import javax.portlet.RenderResponse;
031 import javax.portlet.ResourceRequest;
032 import javax.portlet.ResourceResponse;
033 import javax.portlet.ResourceServingPortlet;
034 import javax.portlet.filter.ActionFilter;
035 import javax.portlet.filter.EventFilter;
036 import javax.portlet.filter.FilterChain;
037 import javax.portlet.filter.PortletFilter;
038 import javax.portlet.filter.RenderFilter;
039 import javax.portlet.filter.ResourceFilter;
040
041
044 public class FilterChainImpl implements FilterChain {
045
046 public FilterChainImpl(
047 Portlet portlet, List<? extends PortletFilter> portletFilters) {
048
049 _portlet = portlet;
050
051 if (portletFilters != null) {
052 _portletFilters = portletFilters;
053 }
054 else {
055 _portletFilters = Collections.emptyList();
056 }
057 }
058
059 @Override
060 public void doFilter(
061 ActionRequest actionRequest, ActionResponse actionResponse)
062 throws IOException, PortletException {
063
064 if (_portletFilters.size() > _pos) {
065 ActionFilter actionFilter = (ActionFilter)_portletFilters.get(
066 _pos++);
067
068 actionFilter.doFilter(actionRequest, actionResponse, this);
069 }
070 else {
071 _portlet.processAction(actionRequest, actionResponse);
072 }
073 }
074
075 @Override
076 public void doFilter(EventRequest eventRequest, EventResponse eventResponse)
077 throws IOException, PortletException {
078
079 if (_portletFilters.size() > _pos) {
080 EventFilter eventFilter = (EventFilter)_portletFilters.get(_pos++);
081
082 eventFilter.doFilter(eventRequest, eventResponse, this);
083 }
084 else {
085 EventPortlet eventPortlet = (EventPortlet)_portlet;
086
087 eventPortlet.processEvent(eventRequest, eventResponse);
088 }
089 }
090
091 @Override
092 public void doFilter(
093 RenderRequest renderRequest, RenderResponse renderResponse)
094 throws IOException, PortletException {
095
096 if (_portletFilters.size() > _pos) {
097 RenderFilter renderFilter = (RenderFilter)_portletFilters.get(
098 _pos++);
099
100 renderFilter.doFilter(renderRequest, renderResponse, this);
101 }
102 else {
103 _portlet.render(renderRequest, renderResponse);
104 }
105 }
106
107 @Override
108 public void doFilter(
109 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
110 throws IOException, PortletException {
111
112 if (_portletFilters.size() > _pos) {
113 ResourceFilter resourceFilter = (ResourceFilter)_portletFilters.get(
114 _pos++);
115
116 resourceFilter.doFilter(resourceRequest, resourceResponse, this);
117 }
118 else {
119 ResourceServingPortlet resourceServingPortlet =
120 (ResourceServingPortlet)_portlet;
121
122 resourceServingPortlet.serveResource(
123 resourceRequest, resourceResponse);
124 }
125 }
126
127 private Portlet _portlet;
128 private List<? extends PortletFilter> _portletFilters;
129 private int _pos;
130
131 }