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.EMPTY_LIST;
056 }
057 }
058
059 public void doFilter(
060 ActionRequest actionRequest, ActionResponse actionResponse)
061 throws IOException, PortletException {
062
063 if (_portletFilters.size() > _pos) {
064 ActionFilter portletFilter = (ActionFilter)_portletFilters.get(
065 _pos++);
066
067 portletFilter.doFilter(actionRequest, actionResponse, this);
068 }
069 else {
070 _portlet.processAction(actionRequest, actionResponse);
071 }
072 }
073
074 public void doFilter(EventRequest eventRequest, EventResponse eventResponse)
075 throws IOException, PortletException {
076
077 if (_portletFilters.size() > _pos) {
078 EventFilter portletFilter = (EventFilter)_portletFilters.get(
079 _pos++);
080
081 portletFilter.doFilter(eventRequest, eventResponse, this);
082 }
083 else {
084 EventPortlet eventPortlet = (EventPortlet)_portlet;
085
086 eventPortlet.processEvent(eventRequest, eventResponse);
087 }
088 }
089
090 public void doFilter(
091 RenderRequest renderRequest, RenderResponse renderResponse)
092 throws IOException, PortletException {
093
094 if (_portletFilters.size() > _pos) {
095 RenderFilter portletFilter = (RenderFilter)_portletFilters.get(
096 _pos++);
097
098 portletFilter.doFilter(renderRequest, renderResponse, this);
099 }
100 else {
101 _portlet.render(renderRequest, renderResponse);
102 }
103 }
104
105 public void doFilter(
106 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
107 throws IOException, PortletException {
108
109 if (_portletFilters.size() > _pos) {
110 ResourceFilter portletFilter = (ResourceFilter)_portletFilters.get(
111 _pos++);
112
113 portletFilter.doFilter(resourceRequest, resourceResponse, this);
114 }
115 else {
116 ResourceServingPortlet resourceServingPortlet =
117 (ResourceServingPortlet)_portlet;
118
119 resourceServingPortlet.serveResource(
120 resourceRequest, resourceResponse);
121 }
122 }
123
124 private Portlet _portlet;
125 private List<? extends PortletFilter> _portletFilters;
126 private int _pos;
127
128 }