001
014
015 package com.liferay.util.freemarker;
016
017 import com.liferay.portal.kernel.servlet.PortletServlet;
018 import com.liferay.portal.kernel.servlet.ServletContextPool;
019 import com.liferay.portal.kernel.template.Template;
020 import com.liferay.portal.kernel.template.TemplateConstants;
021 import com.liferay.portal.kernel.template.TemplateTaglibSupportProvider;
022 import com.liferay.portal.util.PortalUtil;
023
024 import freemarker.ext.servlet.HttpRequestHashModel;
025 import freemarker.ext.servlet.ServletContextHashModel;
026
027 import freemarker.template.ObjectWrapper;
028 import freemarker.template.TemplateHashModel;
029
030 import javax.portlet.PortletRequest;
031 import javax.portlet.PortletResponse;
032
033 import javax.servlet.ServletConfig;
034 import javax.servlet.ServletContext;
035 import javax.servlet.http.HttpServletRequest;
036 import javax.servlet.http.HttpServletResponse;
037
038
041 public class FreeMarkerTemplateTaglibSupportProvider
042 implements TemplateTaglibSupportProvider {
043
044 @Override
045 public void addTaglibSupport(
046 Template template, String servletContextName,
047 PortletRequest portletRequest, PortletResponse portletResponse)
048 throws Exception {
049
050 HttpServletRequest request = PortalUtil.getHttpServletRequest(
051 portletRequest);
052
053 template.prepare(request);
054
055 template.put(
056 "fullTemplatesPath", servletContextName.concat(
057 TemplateConstants.SERVLET_SEPARATOR));
058
059 ServletConfig servletConfig =
060 (ServletConfig)portletRequest.getAttribute(
061 PortletServlet.PORTLET_SERVLET_CONFIG);
062
063 PortletServlet portletServlet = new PortletServlet();
064
065 portletServlet.init(servletConfig);
066
067 ServletContextHashModel servletContextHashModel =
068 new ServletContextHashModel(
069 portletServlet, ObjectWrapper.DEFAULT_WRAPPER);
070
071 template.put("Application", servletContextHashModel);
072
073 ServletContext servletContext = ServletContextPool.get(
074 servletContextName);
075
076 TemplateHashModel taglibsFactory =
077 FreeMarkerTaglibFactoryUtil.createTaglibFactory(servletContext);
078
079 template.put("PortletJspTagLibs", taglibsFactory);
080
081 HttpServletResponse response = PortalUtil.getHttpServletResponse(
082 portletResponse);
083
084 HttpRequestHashModel httpRequestHashModel = new HttpRequestHashModel(
085 request, response, ObjectWrapper.DEFAULT_WRAPPER);
086
087 template.put("Request", httpRequestHashModel);
088 }
089
090 }