<%@ jet package="org.eclipse.jst.j2ee.internal.web.operations" 
	imports="java.util.* org.eclipse.jst.j2ee.internal.common.operations.*" 
	class="FilterTemplate" 
%>
<% CreateFilterTemplateModel model = (CreateFilterTemplateModel) argument; %>
<%@ include file="_flags.template" %>
<%@ include file="_package.template" %>
<%@ include file="_imports.template" %>
<%@ include file="filter_classHeader.template" %>
<%@ include file="_class.template" %>
<%@ include file="_constructors.template" %>
<%@ include file="_methods.template" %>
<% if (model.shouldGenDestroy()) { %>

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}
<% } %>
<% if (model.shouldGenDoFilter()) { %>

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		chain.doFilter(request, response);
	}
<% } %>
<% if (model.shouldGenInit()) { %>

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}
<% } %>

}
