001 package com.mockrunner.mock.web; 002 003 import javax.servlet.Servlet; 004 import javax.servlet.ServletContext; 005 import javax.servlet.ServletRequest; 006 import javax.servlet.ServletResponse; 007 import javax.servlet.jsp.JspApplicationContext; 008 import javax.servlet.jsp.JspEngineInfo; 009 import javax.servlet.jsp.JspFactory; 010 import javax.servlet.jsp.PageContext; 011 012 import org.apache.jasper.runtime.JspApplicationContextImpl; 013 014 /** 015 * This implementation of <code>JspFactory</code> 016 * provides full support of the <b>Unified Expression Language</b> 017 * API. Expression evaluation is available only for the <b>Unified 018 * Expression Language</b> API, not for the pre JSP 2.1 019 * <code>javax.servlet.jsp.el</code> Expression Language API. 020 */ 021 public class JasperJspFactory extends JspFactory 022 { 023 private WebMockObjectFactory mockFactory; 024 private JspEngineInfo engineInfo; 025 private JspApplicationContextImpl applicationContext; 026 027 public JasperJspFactory() 028 { 029 engineInfo = new MockJspEngineInfo(); 030 } 031 032 /** 033 * Configures this implementation for EL support. 034 * Use 035 * <code>getWebMockObjectFactory().setDefaultJspFactory(new JasperJspFactory().configure(getWebMockObjectFactory()));</code> 036 * to set this implementation as the default factory. 037 * @return this instance for convenience 038 */ 039 public JasperJspFactory configure(WebMockObjectFactory mockFactory) 040 { 041 this.mockFactory = mockFactory; 042 applicationContext = JspApplicationContextImpl.getInstance(mockFactory.getMockServletContext()); 043 mockFactory.getMockPageContext().setELContext(applicationContext.createELContext(mockFactory.getMockPageContext())); 044 return this; 045 } 046 047 /** 048 * Set the <code>JspEngineInfo</code>. Per default, 049 * {@link MockJspEngineInfo} is used. 050 * @param engineInfo the <code>JspEngineInfo</code> 051 */ 052 public void setEngineInfo(JspEngineInfo engineInfo) 053 { 054 this.engineInfo = engineInfo; 055 } 056 057 public JspEngineInfo getEngineInfo() 058 { 059 return engineInfo; 060 } 061 062 public JspApplicationContext getJspApplicationContext(ServletContext context) 063 { 064 return applicationContext; 065 } 066 067 public PageContext getPageContext(Servlet servlet, ServletRequest request, ServletResponse response, String errorPageURL, boolean needsSession, int buffer, boolean autoflush) 068 { 069 return mockFactory.getMockPageContext(); 070 } 071 072 public void releasePageContext(PageContext pageContext) 073 { 074 075 } 076 }