001
014
015 package com.liferay.taglib.portletext;
016
017 import com.liferay.portal.kernel.json.JSONFactoryUtil;
018 import com.liferay.portal.kernel.json.JSONObject;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.portlet.PortletContainerUtil;
022 import com.liferay.portal.kernel.portlet.PortletJSONUtil;
023 import com.liferay.portal.kernel.portlet.PortletLayoutListener;
024 import com.liferay.portal.kernel.portlet.PortletParameterUtil;
025 import com.liferay.portal.kernel.portlet.RestrictPortletServletRequest;
026 import com.liferay.portal.kernel.servlet.DynamicServletRequest;
027 import com.liferay.portal.kernel.servlet.PipingServletResponse;
028 import com.liferay.portal.kernel.util.StringPool;
029 import com.liferay.portal.kernel.util.WebKeys;
030 import com.liferay.portal.model.Layout;
031 import com.liferay.portal.model.LayoutTypePortlet;
032 import com.liferay.portal.model.Portlet;
033 import com.liferay.portal.service.PortletLocalServiceUtil;
034 import com.liferay.portal.service.PortletPreferencesLocalServiceUtil;
035 import com.liferay.portal.theme.ThemeDisplay;
036 import com.liferay.portal.util.PortletKeys;
037 import com.liferay.portlet.PortletPreferencesFactoryUtil;
038
039 import javax.servlet.http.HttpServletRequest;
040 import javax.servlet.http.HttpServletResponse;
041 import javax.servlet.jsp.JspException;
042 import javax.servlet.jsp.PageContext;
043 import javax.servlet.jsp.tagext.TagSupport;
044
045
048 public class RuntimeTag extends TagSupport {
049
050 public static void doTag(
051 String portletName, PageContext pageContext,
052 HttpServletRequest request, HttpServletResponse response)
053 throws Exception {
054
055 doTag(portletName, null, pageContext, request, response);
056 }
057
058 public static void doTag(
059 String portletName, String queryString, PageContext pageContext,
060 HttpServletRequest request, HttpServletResponse response)
061 throws Exception {
062
063 doTag(portletName, queryString, null, pageContext, request, response);
064 }
065
066 public static void doTag(
067 String portletName, String queryString, String defaultPreferences,
068 PageContext pageContext, HttpServletRequest request,
069 HttpServletResponse response)
070 throws Exception {
071
072 if (pageContext != null) {
073 response = new PipingServletResponse(
074 response, pageContext.getOut());
075 }
076
077 String portletId = portletName;
078
079 RestrictPortletServletRequest restrictPortletServletRequest =
080 new RestrictPortletServletRequest(request);
081
082 queryString = PortletParameterUtil.addNamespace(portletId, queryString);
083
084 request = DynamicServletRequest.addQueryString(
085 restrictPortletServletRequest, queryString);
086
087 try {
088 request.setAttribute(WebKeys.RENDER_PORTLET_RESOURCE, Boolean.TRUE);
089
090 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
091 WebKeys.THEME_DISPLAY);
092
093 if (themeDisplay.isStateMaximized()) {
094 LayoutTypePortlet layoutTypePortlet =
095 themeDisplay.getLayoutTypePortlet();
096
097 if (layoutTypePortlet.hasStateMaxPortletId(portletId)) {
098
099
100
101
102 return;
103 }
104 }
105
106 Layout layout = themeDisplay.getLayout();
107
108 Portlet portlet = getPortlet(
109 themeDisplay.getCompanyId(), portletId);
110
111 JSONObject jsonObject = null;
112
113 if ((PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
114 PortletKeys.PREFS_OWNER_TYPE_LAYOUT, themeDisplay.getPlid(),
115 portletId) < 1) ||
116 layout.isTypeControlPanel() ||
117 layout.isTypePanel()) {
118
119 PortletPreferencesFactoryUtil.getPortletSetup(
120 request, portletId, defaultPreferences);
121
122 PortletLayoutListener portletLayoutListener =
123 portlet.getPortletLayoutListenerInstance();
124
125 if (portletLayoutListener != null) {
126 portletLayoutListener.onAddToLayout(
127 portletId, themeDisplay.getPlid());
128 }
129
130 jsonObject = JSONFactoryUtil.createJSONObject();
131
132 PortletJSONUtil.populatePortletJSONObject(
133 request, StringPool.BLANK, portlet, jsonObject);
134 }
135
136 if (jsonObject != null) {
137 PortletJSONUtil.writeHeaderPaths(response, jsonObject);
138 }
139
140 PortletContainerUtil.render(request, response, portlet);
141
142 if (jsonObject != null) {
143 PortletJSONUtil.writeFooterPaths(response, jsonObject);
144 }
145 }
146 finally {
147 restrictPortletServletRequest.mergeSharedAttributes();
148 }
149 }
150
151 @Override
152 public int doEndTag() throws JspException {
153 try {
154 HttpServletRequest request =
155 (HttpServletRequest)pageContext.getRequest();
156
157 Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
158
159 if (layout == null) {
160 return EVAL_PAGE;
161 }
162
163 HttpServletResponse response =
164 (HttpServletResponse)pageContext.getResponse();
165
166 doTag(
167 _portletName, _queryString, _defaultPreferences, pageContext,
168 request, response);
169
170 return EVAL_PAGE;
171 }
172 catch (Exception e) {
173 _log.error(e, e);
174
175 throw new JspException(e);
176 }
177 }
178
179 public void setDefaultPreferences(String defaultPreferences) {
180 _defaultPreferences = defaultPreferences;
181 }
182
183 public void setPortletName(String portletName) {
184 _portletName = portletName;
185 }
186
187 public void setQueryString(String queryString) {
188 _queryString = queryString;
189 }
190
191
195 protected static Portlet getPortlet(long companyId, String portletId)
196 throws Exception {
197
198 Portlet portlet = PortletLocalServiceUtil.getPortletById(
199 companyId, portletId);
200
201
202
203
204 if (!portlet.isInstanceable()) {
205 portlet = (Portlet)portlet.clone();
206 }
207
208 portlet.setStatic(true);
209
210 return portlet;
211 }
212
213 private static Log _log = LogFactoryUtil.getLog(RuntimeTag.class);
214
215 private String _defaultPreferences;
216 private String _portletName;
217 private String _queryString;
218
219 }