1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.taglib.portletext;
16  
17  import com.liferay.portal.kernel.log.Log;
18  import com.liferay.portal.kernel.log.LogFactoryUtil;
19  import com.liferay.portal.kernel.servlet.PipingServletResponse;
20  import com.liferay.portal.kernel.util.JavaConstants;
21  import com.liferay.portal.kernel.util.Validator;
22  import com.liferay.portal.kernel.util.WebKeys;
23  import com.liferay.portal.model.Layout;
24  import com.liferay.portlet.PortletPreferencesFactoryUtil;
25  import com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil;
26  
27  import javax.portlet.PortletRequest;
28  import javax.portlet.PortletResponse;
29  import javax.portlet.RenderRequest;
30  import javax.portlet.RenderResponse;
31  
32  import javax.servlet.ServletContext;
33  import javax.servlet.http.HttpServletRequest;
34  import javax.servlet.http.HttpServletResponse;
35  import javax.servlet.jsp.JspException;
36  import javax.servlet.jsp.PageContext;
37  import javax.servlet.jsp.tagext.TagSupport;
38  
39  /**
40   * <a href="RuntimeTag.java.html"><b><i>View Source</i></b></a>
41   *
42   * @author Brian Wing Shun Chan
43   */
44  public class RuntimeTag extends TagSupport {
45  
46      public static void doTag(
47              String portletName, PageContext pageContext,
48              ServletContext servletContext, HttpServletRequest request,
49              HttpServletResponse response)
50          throws Exception {
51  
52          doTag(
53              portletName, null, pageContext, servletContext, request, response);
54      }
55  
56      public static void doTag(
57              String portletName, String queryString, PageContext pageContext,
58              ServletContext servletContext, HttpServletRequest request,
59              HttpServletResponse response)
60          throws Exception {
61  
62          doTag(
63              portletName, queryString, null, pageContext, servletContext,
64              request, response);
65      }
66  
67      public static void doTag(
68              String portletName, String queryString, String defaultPreferences,
69              PageContext pageContext, ServletContext servletContext,
70              HttpServletRequest request, HttpServletResponse response)
71          throws Exception {
72  
73          if (pageContext != null) {
74              response = new PipingServletResponse(
75                  response, pageContext.getOut());
76          }
77  
78          PortletRequest portletRequest = (PortletRequest)request.getAttribute(
79              JavaConstants.JAVAX_PORTLET_REQUEST);
80  
81          RenderRequest renderRequest = null;
82  
83          if ((portletRequest != null) &&
84              (portletRequest instanceof RenderRequest)) {
85  
86              renderRequest = (RenderRequest)portletRequest;
87          }
88  
89          PortletResponse portletResponse = (PortletResponse)request.getAttribute(
90              JavaConstants.JAVAX_PORTLET_RESPONSE);
91  
92          RenderResponse renderResponse = null;
93  
94          if ((portletResponse != null) &&
95              (portletResponse instanceof RenderResponse)) {
96  
97              renderResponse = (RenderResponse)portletResponse;
98          }
99  
100         String portletId = portletName;
101 
102         try {
103             request.setAttribute(WebKeys.RENDER_PORTLET_RESOURCE, Boolean.TRUE);
104 
105             if (Validator.isNotNull(defaultPreferences)) {
106                 PortletPreferencesFactoryUtil.getPortletSetup(
107                     request, portletId, defaultPreferences);
108             }
109 
110             RuntimePortletUtil.processPortlet(
111                 servletContext, request, response, renderRequest,
112                 renderResponse, portletId, queryString, true);
113         }
114         finally {
115             request.removeAttribute(WebKeys.RENDER_PORTLET_RESOURCE);
116         }
117     }
118 
119     public int doEndTag() throws JspException {
120         try {
121             HttpServletRequest request =
122                 (HttpServletRequest)pageContext.getRequest();
123 
124             Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
125 
126             if (layout == null) {
127                 return EVAL_PAGE;
128             }
129 
130             ServletContext servletContext =
131                 (ServletContext)request.getAttribute(WebKeys.CTX);
132 
133             HttpServletResponse response =
134                 (HttpServletResponse)pageContext.getResponse();
135 
136             doTag(
137                 _portletName, _queryString, _defaultPreferences, pageContext,
138                 servletContext, request, response);
139 
140             return EVAL_PAGE;
141         }
142         catch (Exception e) {
143             _log.error(e, e);
144 
145             throw new JspException(e);
146         }
147     }
148 
149     public void setPortletName(String portletName) {
150         _portletName = portletName;
151     }
152 
153     public void setQueryString(String queryString) {
154         _queryString = queryString;
155     }
156 
157     public void setDefaultPreferences(String defaultPreferences) {
158         _defaultPreferences = defaultPreferences;
159     }
160 
161     private static Log _log = LogFactoryUtil.getLog(RuntimeTag.class);
162 
163     private String _portletName;
164     private String _queryString;
165     private String _defaultPreferences;
166 
167 }