1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   * SOFTWARE.
18   */
19  
20  package com.liferay.taglib.portletext;
21  
22  import com.liferay.portal.kernel.log.Log;
23  import com.liferay.portal.kernel.log.LogFactoryUtil;
24  import com.liferay.portal.kernel.util.JavaConstants;
25  import com.liferay.portal.kernel.util.Validator;
26  import com.liferay.portal.model.Layout;
27  import com.liferay.portal.util.WebKeys;
28  import com.liferay.portlet.PortletPreferencesFactoryUtil;
29  import com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil;
30  
31  import javax.portlet.PortletRequest;
32  import javax.portlet.PortletResponse;
33  import javax.portlet.RenderRequest;
34  import javax.portlet.RenderResponse;
35  
36  import javax.servlet.ServletContext;
37  import javax.servlet.http.HttpServletRequest;
38  import javax.servlet.http.HttpServletResponse;
39  import javax.servlet.jsp.JspException;
40  import javax.servlet.jsp.PageContext;
41  import javax.servlet.jsp.tagext.TagSupport;
42  
43  /**
44   * <a href="RuntimeTag.java.html"><b><i>View Source</i></b></a>
45   *
46   * @author Brian Wing Shun Chan
47   *
48   */
49  public class RuntimeTag extends TagSupport {
50  
51      public static void doTag(
52              String portletName, PageContext pageContext,
53              ServletContext servletContext, HttpServletRequest request,
54              HttpServletResponse response)
55          throws Exception {
56  
57          doTag(
58              portletName, null, pageContext, servletContext, request, response);
59      }
60  
61      public static void doTag(
62              String portletName, String queryString, PageContext pageContext,
63              ServletContext servletContext, HttpServletRequest request,
64              HttpServletResponse response)
65          throws Exception {
66  
67          doTag(
68              portletName, null, null, pageContext, servletContext, request,
69              response);
70      }
71  
72      public static void doTag(
73              String portletName, String queryString, String defaultPreferences,
74              PageContext pageContext, ServletContext servletContext,
75              HttpServletRequest request, HttpServletResponse response)
76          throws Exception {
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         StringBuilder sb = new StringBuilder();
103 
104         try {
105             request.setAttribute(WebKeys.RENDER_PORTLET_RESOURCE, Boolean.TRUE);
106 
107             if (Validator.isNotNull(defaultPreferences)) {
108                 PortletPreferencesFactoryUtil.getPortletSetup(
109                     request, portletId, defaultPreferences);
110             }
111 
112             RuntimePortletUtil.processPortlet(
113                 sb, servletContext, request, response, renderRequest,
114                 renderResponse, portletId, queryString);
115         }
116         finally {
117             request.removeAttribute(WebKeys.RENDER_PORTLET_RESOURCE);
118         }
119 
120         if (pageContext != null) {
121             pageContext.getOut().print(sb.toString());
122         }
123         else {
124 
125             // LEP-1023
126 
127             //res.getOutputStream().print(renderPortletSM.toString());
128             response.getWriter().print(sb.toString());
129         }
130     }
131 
132     public int doEndTag() throws JspException {
133         try {
134             HttpServletRequest request =
135                 (HttpServletRequest)pageContext.getRequest();
136 
137             Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
138 
139             if (layout == null) {
140                 return EVAL_PAGE;
141             }
142 
143             ServletContext servletContext =
144                 (ServletContext)request.getAttribute(WebKeys.CTX);
145 
146             HttpServletResponse response =
147                 (HttpServletResponse)pageContext.getResponse();
148 
149             doTag(
150                 _portletName, _queryString, _defaultPreferences, pageContext,
151                 servletContext, request, response);
152 
153             return EVAL_PAGE;
154         }
155         catch (Exception e) {
156             _log.error(e, e);
157 
158             throw new JspException(e);
159         }
160     }
161 
162     public void setPortletName(String portletName) {
163         _portletName = portletName;
164     }
165 
166     public void setQueryString(String queryString) {
167         _queryString = queryString;
168     }
169 
170     public void setDefaultPreferences(String defaultPreferences) {
171         _defaultPreferences = defaultPreferences;
172     }
173 
174     private static Log _log = LogFactoryUtil.getLog(RuntimeTag.class);
175 
176     private String _portletName;
177     private String _queryString;
178     private String _defaultPreferences;
179 
180 }