/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.portlet.container; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.EventPortlet; import javax.portlet.EventRequest; import javax.portlet.EventResponse; import javax.portlet.Portlet; import javax.portlet.PortletContext; import javax.portlet.PortletException; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.ResourceRequest; import javax.portlet.ResourceResponse; import javax.portlet.ResourceServingPortlet; import javax.portlet.filter.ActionFilter; import javax.portlet.filter.EventFilter; import javax.portlet.filter.FilterChain; import javax.portlet.filter.RenderFilter; import javax.portlet.filter.ResourceFilter; import org.apache.pluto.container.om.portlet.Filter; /** * Implementation of {@link FilterChain}. */ public class FilterChainImpl implements FilterChain { private List<Filter> filterList = new ArrayList<Filter>(); private String lifeCycle; Portlet portlet; EventPortlet eventPortlet; ResourceServingPortlet resourceServingPortlet; ClassLoader loader; PortletContext portletContext; int filterListIndex = 0; public FilterChainImpl(String lifeCycle) { this.lifeCycle = lifeCycle; } public void processFilter( EventRequest req, EventResponse res, EventPortlet eventPortlet, PortletContext portletContext) throws IOException, PortletException { this.eventPortlet = eventPortlet; this.loader = Thread.currentThread().getContextClassLoader(); this.portletContext = portletContext; doFilter(req, res); } public void processFilter( ResourceRequest req, ResourceResponse res, ResourceServingPortlet resourceServingPortlet, PortletContext portletContext) throws IOException, PortletException { this.resourceServingPortlet = resourceServingPortlet; this.loader = Thread.currentThread().getContextClassLoader(); this.portletContext = portletContext; doFilter(req, res); } public void processFilter( ActionRequest req, ActionResponse res, Portlet portlet, PortletContext portletContext) throws IOException, PortletException { this.portlet = portlet; this.loader = Thread.currentThread().getContextClassLoader(); this.portletContext = portletContext; doFilter(req, res); } public void processFilter( RenderRequest req, RenderResponse res, Portlet portlet, PortletContext portletContext) throws IOException, PortletException { this.portlet = portlet; this.loader = Thread.currentThread().getContextClassLoader(); this.portletContext = portletContext; doFilter(req, res); } public void addFilter(Filter filter) { filterList.add(filter); } public void doFilter(ActionRequest request, ActionResponse response) throws IOException, PortletException { if (filterListIndex < filterList.size()) { Filter filter = filterList.get(filterListIndex); filterListIndex++; try { ActionFilter actionFilter = (ActionFilter) loader.loadClass(filter.getFilterClass()).newInstance(); FilterConfigImpl filterConfig = new FilterConfigImpl( filter.getFilterName(), filter.getInitParams(), portletContext); actionFilter.init(filterConfig); actionFilter.doFilter(request, response, this); actionFilter.destroy(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } else { portlet.processAction(request, response); } } public void doFilter(EventRequest request, EventResponse response) throws IOException, PortletException { if (filterListIndex < filterList.size()) { Filter filter = filterList.get(filterListIndex); filterListIndex++; try { EventFilter eventFilter = (EventFilter) loader.loadClass(filter.getFilterClass()).newInstance(); FilterConfigImpl filterConfig = new FilterConfigImpl( filter.getFilterName(), filter.getInitParams(), portletContext); eventFilter.init(filterConfig); eventFilter.doFilter(request, response, this); eventFilter.destroy(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } else { eventPortlet.processEvent(request, response); } } public void doFilter(RenderRequest request, RenderResponse response) throws IOException, PortletException { if (filterListIndex < filterList.size()) { Filter filter = filterList.get(filterListIndex); filterListIndex++; try { RenderFilter renderFilter = (RenderFilter) loader.loadClass(filter.getFilterClass()).newInstance(); FilterConfigImpl filterConfig = new FilterConfigImpl( filter.getFilterName(), filter.getInitParams(), portletContext); renderFilter.init(filterConfig); renderFilter.doFilter(request, response, this); renderFilter.destroy(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } else { portlet.render(request, response); } } public void doFilter(ResourceRequest request, ResourceResponse response) throws IOException, PortletException { if (filterListIndex < filterList.size()) { Filter filter = filterList.get(filterListIndex); filterListIndex++; try { ResourceFilter resourceFilter = (ResourceFilter) loader.loadClass(filter.getFilterClass()).newInstance(); FilterConfigImpl filterConfig = new FilterConfigImpl( filter.getFilterName(), filter.getInitParams(), portletContext); resourceFilter.init(filterConfig); resourceFilter.doFilter(request, response, this); resourceFilter.destroy(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } else { resourceServingPortlet.serveResource(request, response); } } }