/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.core.ui;
import org.jboss.seam.ScopeType;
import org.jboss.seam.util.EnumerationEnumeration;
import org.jboss.seam.annotations.*;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.annotations.web.Filter;
import org.jboss.seam.web.AbstractFilter;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Collections;
import java.util.Map;
/**
* Adapts the Tuckey URLRewrite filter to the Seam filter chain.
*
* @author Christian Bauer
*/
@Startup
@Scope(ScopeType.APPLICATION)
@Name("wikiUrlRewriteFilter")
@BypassInterceptors
@Filter(within = "org.jboss.seam.web.exceptionFilter")
@Install(classDependencies = "org.tuckey.web.filters.urlrewrite.UrlRewriteFilter", precedence = Install.APPLICATION)
public class WikiUrlRewriteFilter extends AbstractFilter {
private UrlRewriteFilter urlRewriteFilter;
public void init(FilterConfig filterConfig) throws ServletException {
urlRewriteFilter = new UrlRewriteFilter();
urlRewriteFilter.init(new FilterConfigWrapper(filterConfig, getInitParameters()));
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
urlRewriteFilter.doFilter(servletRequest, servletResponse, filterChain);
}
private Map<String, String> initParameters;
public Map<String, String> getInitParameters() {
return initParameters;
}
public void setInitParameters(Map<String, String> initParameters) {
this.initParameters = initParameters;
}
private class FilterConfigWrapper implements FilterConfig {
private FilterConfig delegate;
private Map<String, String> parameters;
public FilterConfigWrapper(FilterConfig filterConfig, Map<String, String> initParameters) {
delegate = filterConfig;
parameters = initParameters;
}
public String getFilterName() {
return delegate.getFilterName();
}
public String getInitParameter(String name) {
if (parameters.containsKey(name)) {
return parameters.get(name);
} else {
return delegate.getInitParameter(name);
}
}
public Enumeration getInitParameterNames() {
Enumeration[] enumerations = {delegate.getInitParameterNames(), Collections.enumeration(parameters.keySet())};
return new EnumerationEnumeration(enumerations);
}
public ServletContext getServletContext() {
return delegate.getServletContext();
}
}
}