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.util.JavaConstants;
20  import com.liferay.portal.kernel.util.Validator;
21  import com.liferay.portal.kernel.util.WebKeys;
22  import com.liferay.portal.model.Layout;
23  import com.liferay.portlet.PortletPreferencesFactoryUtil;
24  import com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil;
25  
26  import javax.portlet.PortletRequest;
27  import javax.portlet.PortletResponse;
28  import javax.portlet.RenderRequest;
29  import javax.portlet.RenderResponse;
30  
31  import javax.servlet.ServletContext;
32  import javax.servlet.http.HttpServletRequest;
33  import javax.servlet.http.HttpServletResponse;
34  import javax.servlet.jsp.JspException;
35  import javax.servlet.jsp.PageContext;
36  import javax.servlet.jsp.tagext.TagSupport;
37  
38  /**
39   * <a href="RuntimeTag.java.html"><b><i>View Source</i></b></a>
40   *
41   * @author Brian Wing Shun Chan
42   */
43  public class RuntimeTag extends TagSupport {
44  
45      public static void doTag(
46              String portletName, PageContext pageContext,
47              ServletContext servletContext, HttpServletRequest request,
48              HttpServletResponse response)
49          throws Exception {
50  
51          doTag(
52              portletName, null, pageContext, servletContext, request, response);
53      }
54  
55      public static void doTag(
56              String portletName, String queryString, PageContext pageContext,
57              ServletContext servletContext, HttpServletRequest request,
58              HttpServletResponse response)
59          throws Exception {
60  
61          doTag(
62              portletName, null, null, pageContext, servletContext, request,
63              response);
64      }
65  
66      public static void doTag(
67              String portletName, String queryString, String defaultPreferences,
68              PageContext pageContext, ServletContext servletContext,
69              HttpServletRequest request, HttpServletResponse response)
70          throws Exception {
71  
72          PortletRequest portletRequest = (PortletRequest)request.getAttribute(
73              JavaConstants.JAVAX_PORTLET_REQUEST);
74  
75          RenderRequest renderRequest = null;
76  
77          if ((portletRequest != null) &&
78              (portletRequest instanceof RenderRequest)) {
79  
80              renderRequest = (RenderRequest)portletRequest;
81          }
82  
83          PortletResponse portletResponse = (PortletResponse)request.getAttribute(
84              JavaConstants.JAVAX_PORTLET_RESPONSE);
85  
86          RenderResponse renderResponse = null;
87  
88          if ((portletResponse != null) &&
89              (portletResponse instanceof RenderResponse)) {
90  
91              renderResponse = (RenderResponse)portletResponse;
92          }
93  
94          String portletId = portletName;
95  
96          StringBuilder sb = new StringBuilder();
97  
98          try {
99              request.setAttribute(WebKeys.RENDER_PORTLET_RESOURCE, Boolean.TRUE);
100 
101             if (Validator.isNotNull(defaultPreferences)) {
102                 PortletPreferencesFactoryUtil.getPortletSetup(
103                     request, portletId, defaultPreferences);
104             }
105 
106             RuntimePortletUtil.processPortlet(
107                 sb, servletContext, request, response, renderRequest,
108                 renderResponse, portletId, queryString);
109         }
110         finally {
111             request.removeAttribute(WebKeys.RENDER_PORTLET_RESOURCE);
112         }
113 
114         if (pageContext != null) {
115             pageContext.getOut().print(sb.toString());
116         }
117         else {
118 
119             // LEP-1023
120 
121             //res.getOutputStream().print(renderPortletSM.toString());
122             response.getWriter().print(sb.toString());
123         }
124     }
125 
126     public int doEndTag() throws JspException {
127         try {
128             HttpServletRequest request =
129                 (HttpServletRequest)pageContext.getRequest();
130 
131             Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
132 
133             if (layout == null) {
134                 return EVAL_PAGE;
135             }
136 
137             ServletContext servletContext =
138                 (ServletContext)request.getAttribute(WebKeys.CTX);
139 
140             HttpServletResponse response =
141                 (HttpServletResponse)pageContext.getResponse();
142 
143             doTag(
144                 _portletName, _queryString, _defaultPreferences, pageContext,
145                 servletContext, request, response);
146 
147             return EVAL_PAGE;
148         }
149         catch (Exception e) {
150             _log.error(e, e);
151 
152             throw new JspException(e);
153         }
154     }
155 
156     public void setPortletName(String portletName) {
157         _portletName = portletName;
158     }
159 
160     public void setQueryString(String queryString) {
161         _queryString = queryString;
162     }
163 
164     public void setDefaultPreferences(String defaultPreferences) {
165         _defaultPreferences = defaultPreferences;
166     }
167 
168     private static Log _log = LogFactoryUtil.getLog(RuntimeTag.class);
169 
170     private String _portletName;
171     private String _queryString;
172     private String _defaultPreferences;
173 
174 }