/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.content.targeting.portlet; import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.template.Template; import com.liferay.portal.kernel.template.TemplateConstants; import com.liferay.portal.kernel.template.TemplateException; import com.liferay.portal.kernel.template.TemplateManagerUtil; import com.liferay.portal.kernel.template.TemplateResource; import com.liferay.portal.kernel.template.TemplateResourceLoaderUtil; import com.liferay.portal.kernel.template.TemplateTaglibSupportProvider; import com.liferay.portal.kernel.util.UnsyncPrintWriterPool; import com.liferay.portal.util.PortalUtil; import freemarker.ext.servlet.HttpRequestHashModel; import freemarker.template.ObjectWrapper; import java.io.IOException; import java.io.Writer; import javax.portlet.MimeResponse; import javax.portlet.PortletContext; import javax.portlet.PortletException; import javax.portlet.PortletRequest; import javax.portlet.PortletResponse; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponseWrapper; /** * This class fixes some issues in the FreeMarkerPortlet class. * * @author Eudaldo Alonso */ public class FreeMarkerPortlet extends com.liferay.util.bridges.freemarker.FreeMarkerPortlet { @Override protected void include( String path, PortletRequest portletRequest, PortletResponse portletResponse, String lifecycle) throws IOException, PortletException { PortletContext portletContext = getPortletContext(); String servletContextName = portletContext.getPortletContextName(); String resourcePath = servletContextName.concat( TemplateConstants.SERVLET_SEPARATOR).concat(path); boolean resourceExists = false; try { resourceExists = TemplateResourceLoaderUtil.hasTemplateResource( TemplateConstants.LANG_TYPE_FTL, resourcePath); } catch (TemplateException te) { throw new IOException(te); } if (!resourceExists) { _log.error(path + " is not a valid include"); } else { try { TemplateResource templateResource = TemplateResourceLoaderUtil.getTemplateResource( TemplateConstants.LANG_TYPE_FTL, resourcePath); Template template = TemplateManagerUtil.getTemplate( TemplateConstants.LANG_TYPE_FTL, templateResource, false); TemplateTaglibSupportProvider templateTaglibSupportProvider = getTaglibSupportProvider(); if (templateTaglibSupportProvider != null) { templateTaglibSupportProvider.addTaglibSupport( template, servletContextName, portletRequest, portletResponse); } // LPS-43725 HttpServletRequestWrapper httpServletRequestWrapper = new HttpServletRequestWrapper( PortalUtil.getHttpServletRequest(portletRequest)); HttpServletResponseWrapper httpServletResponseWrapper = new HttpServletResponseWrapper( PortalUtil.getHttpServletResponse(portletResponse)); HttpRequestHashModel httpRequestHashModel = new HttpRequestHashModel( httpServletRequestWrapper, httpServletResponseWrapper, ObjectWrapper.DEFAULT_WRAPPER); template.put("Request", httpRequestHashModel); populateContext( path, portletRequest, portletResponse, template); Writer writer = null; if (portletResponse instanceof MimeResponse) { MimeResponse mimeResponse = (MimeResponse)portletResponse; writer = UnsyncPrintWriterPool.borrow( mimeResponse.getWriter()); } else { writer = new UnsyncStringWriter(); } template.processTemplate(writer); } catch (Exception e) { throw new PortletException(e); } } if (clearRequestParameters) { if (lifecycle.equals(PortletRequest.RENDER_PHASE)) { portletResponse.setProperty("clear-request-parameters", "true"); } } } protected void populateContext( String path, PortletRequest portletRequest, PortletResponse portletResponse, Template template) throws Exception { } private static Log _log = LogFactoryUtil.getLog(FreeMarkerPortlet.class); }