1   /**
2    * Copyright (c) 2000-2010 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   *
12   *
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.StringPool;
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          PortletRequest portletRequest = (PortletRequest)request.getAttribute(
74              JavaConstants.JAVAX_PORTLET_REQUEST);
75  
76          RenderRequest renderRequest = null;
77  
78          if ((portletRequest != null) &&
79              (portletRequest instanceof RenderRequest)) {
80  
81              renderRequest = (RenderRequest)portletRequest;
82          }
83  
84          PortletResponse portletResponse = (PortletResponse)request.getAttribute(
85              JavaConstants.JAVAX_PORTLET_RESPONSE);
86  
87          RenderResponse renderResponse = null;
88  
89          if ((portletResponse != null) &&
90              (portletResponse instanceof RenderResponse)) {
91  
92              renderResponse = (RenderResponse)portletResponse;
93          }
94  
95          String portletId = portletName;
96  
97          String content = StringPool.BLANK;
98  
99          try {
100             request.setAttribute(WebKeys.RENDER_PORTLET_RESOURCE, Boolean.TRUE);
101 
102             if (Validator.isNotNull(defaultPreferences)) {
103                 PortletPreferencesFactoryUtil.getPortletSetup(
104                     request, portletId, defaultPreferences);
105             }
106 
107             content = RuntimePortletUtil.processPortlet(
108                 servletContext, request, response, renderRequest,
109                 renderResponse, portletId, queryString);
110         }
111         finally {
112             request.removeAttribute(WebKeys.RENDER_PORTLET_RESOURCE);
113         }
114 
115         if (pageContext != null) {
116             pageContext.getOut().print(content);
117         }
118         else {
119 
120             // LEP-1023
121 
122             //res.getOutputStream().print(renderPortletSM.toString());
123             response.getWriter().print(content);
124         }
125     }
126 
127     public int doEndTag() throws JspException {
128         try {
129             HttpServletRequest request =
130                 (HttpServletRequest)pageContext.getRequest();
131 
132             Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
133 
134             if (layout == null) {
135                 return EVAL_PAGE;
136             }
137 
138             ServletContext servletContext =
139                 (ServletContext)request.getAttribute(WebKeys.CTX);
140 
141             HttpServletResponse response =
142                 (HttpServletResponse)pageContext.getResponse();
143 
144             doTag(
145                 _portletName, _queryString, _defaultPreferences, pageContext,
146                 servletContext, request, response);
147 
148             return EVAL_PAGE;
149         }
150         catch (Exception e) {
151             _log.error(e, e);
152 
153             throw new JspException(e);
154         }
155     }
156 
157     public void setPortletName(String portletName) {
158         _portletName = portletName;
159     }
160 
161     public void setQueryString(String queryString) {
162         _queryString = queryString;
163     }
164 
165     public void setDefaultPreferences(String defaultPreferences) {
166         _defaultPreferences = defaultPreferences;
167     }
168 
169     private static Log _log = LogFactoryUtil.getLog(RuntimeTag.class);
170 
171     private String _portletName;
172     private String _queryString;
173     private String _defaultPreferences;
174 
175 }