001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.taglib.portletext;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.servlet.PipingServletResponse;
020    import com.liferay.portal.kernel.util.JavaConstants;
021    import com.liferay.portal.kernel.util.Validator;
022    import com.liferay.portal.kernel.util.WebKeys;
023    import com.liferay.portal.model.Layout;
024    import com.liferay.portlet.PortletPreferencesFactoryUtil;
025    import com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil;
026    
027    import javax.portlet.PortletRequest;
028    import javax.portlet.PortletResponse;
029    import javax.portlet.RenderRequest;
030    import javax.portlet.RenderResponse;
031    
032    import javax.servlet.ServletContext;
033    import javax.servlet.http.HttpServletRequest;
034    import javax.servlet.http.HttpServletResponse;
035    import javax.servlet.jsp.JspException;
036    import javax.servlet.jsp.PageContext;
037    import javax.servlet.jsp.tagext.TagSupport;
038    
039    /**
040     * @author Brian Wing Shun Chan
041     */
042    public class RuntimeTag extends TagSupport {
043    
044            public static void doTag(
045                            String portletName, PageContext pageContext,
046                            ServletContext servletContext, HttpServletRequest request,
047                            HttpServletResponse response)
048                    throws Exception {
049    
050                    doTag(
051                            portletName, null, pageContext, servletContext, request, response);
052            }
053    
054            public static void doTag(
055                            String portletName, String queryString, PageContext pageContext,
056                            ServletContext servletContext, HttpServletRequest request,
057                            HttpServletResponse response)
058                    throws Exception {
059    
060                    doTag(
061                            portletName, queryString, null, pageContext, servletContext,
062                            request, response);
063            }
064    
065            public static void doTag(
066                            String portletName, String queryString, String defaultPreferences,
067                            PageContext pageContext, ServletContext servletContext,
068                            HttpServletRequest request, HttpServletResponse response)
069                    throws Exception {
070    
071                    if (pageContext != null) {
072                            response = new PipingServletResponse(
073                                    response, pageContext.getOut());
074                    }
075    
076                    PortletRequest portletRequest = (PortletRequest)request.getAttribute(
077                            JavaConstants.JAVAX_PORTLET_REQUEST);
078    
079                    RenderRequest renderRequest = null;
080    
081                    if ((portletRequest != null) &&
082                            (portletRequest instanceof RenderRequest)) {
083    
084                            renderRequest = (RenderRequest)portletRequest;
085                    }
086    
087                    PortletResponse portletResponse = (PortletResponse)request.getAttribute(
088                            JavaConstants.JAVAX_PORTLET_RESPONSE);
089    
090                    RenderResponse renderResponse = null;
091    
092                    if ((portletResponse != null) &&
093                            (portletResponse instanceof RenderResponse)) {
094    
095                            renderResponse = (RenderResponse)portletResponse;
096                    }
097    
098                    String portletId = portletName;
099    
100                    try {
101                            request.setAttribute(WebKeys.RENDER_PORTLET_RESOURCE, Boolean.TRUE);
102    
103                            if (Validator.isNotNull(defaultPreferences)) {
104                                    PortletPreferencesFactoryUtil.getPortletSetup(
105                                            request, portletId, defaultPreferences);
106                            }
107    
108                            RuntimePortletUtil.processPortlet(
109                                    servletContext, request, response, renderRequest,
110                                    renderResponse, portletId, queryString, true);
111                    }
112                    finally {
113                            request.removeAttribute(WebKeys.RENDER_PORTLET_RESOURCE);
114                    }
115            }
116    
117            public int doEndTag() throws JspException {
118                    try {
119                            HttpServletRequest request =
120                                    (HttpServletRequest)pageContext.getRequest();
121    
122                            Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
123    
124                            if (layout == null) {
125                                    return EVAL_PAGE;
126                            }
127    
128                            ServletContext servletContext =
129                                    (ServletContext)request.getAttribute(WebKeys.CTX);
130    
131                            HttpServletResponse response =
132                                    (HttpServletResponse)pageContext.getResponse();
133    
134                            doTag(
135                                    _portletName, _queryString, _defaultPreferences, pageContext,
136                                    servletContext, request, response);
137    
138                            return EVAL_PAGE;
139                    }
140                    catch (Exception e) {
141                            _log.error(e, e);
142    
143                            throw new JspException(e);
144                    }
145            }
146    
147            public void setPortletName(String portletName) {
148                    _portletName = portletName;
149            }
150    
151            public void setQueryString(String queryString) {
152                    _queryString = queryString;
153            }
154    
155            public void setDefaultPreferences(String defaultPreferences) {
156                    _defaultPreferences = defaultPreferences;
157            }
158    
159            private static Log _log = LogFactoryUtil.getLog(RuntimeTag.class);
160    
161            private String _portletName;
162            private String _queryString;
163            private String _defaultPreferences;
164    
165    }