001
014
015 package com.liferay.portal.model.impl;
016
017 import com.liferay.portal.kernel.configuration.Filter;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
020 import com.liferay.portal.kernel.model.Layout;
021 import com.liferay.portal.kernel.model.LayoutConstants;
022 import com.liferay.portal.kernel.model.LayoutTypeController;
023 import com.liferay.portal.kernel.servlet.DirectRequestDispatcherFactoryUtil;
024 import com.liferay.portal.kernel.util.GetterUtil;
025 import com.liferay.portal.kernel.util.ParamUtil;
026 import com.liferay.portal.kernel.util.PropsKeys;
027 import com.liferay.portal.kernel.util.StringUtil;
028 import com.liferay.portal.kernel.util.Validator;
029 import com.liferay.portal.kernel.util.WebKeys;
030 import com.liferay.portal.struts.StrutsUtil;
031 import com.liferay.portal.util.PropsUtil;
032 import com.liferay.taglib.servlet.PipingServletResponse;
033
034 import java.util.Collection;
035 import java.util.Locale;
036 import java.util.Map;
037
038 import javax.servlet.RequestDispatcher;
039 import javax.servlet.ServletContext;
040 import javax.servlet.http.HttpServletRequest;
041 import javax.servlet.http.HttpServletResponse;
042
043
046 public class LayoutTypeControllerImpl implements LayoutTypeController {
047
048 public LayoutTypeControllerImpl(String type) {
049 _type = type;
050
051 Filter filter = new Filter(type);
052
053 _browsable = GetterUtil.getBoolean(
054 PropsUtil.get(PropsKeys.LAYOUT_BROWSABLE, filter), true);
055 _configurationActionDelete = StringUtil.split(
056 GetterUtil.getString(
057 PropsUtil.get(
058 PropsKeys.LAYOUT_CONFIGURATION_ACTION_DELETE, filter)));
059 _configurationActionUpdate = StringUtil.split(
060 GetterUtil.getString(
061 PropsUtil.get(
062 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE, filter)));
063 _editPage = GetterUtil.getString(
064 PropsUtil.get(PropsKeys.LAYOUT_EDIT_PAGE, filter));
065 _firstPageable = GetterUtil.getBoolean(
066 PropsUtil.get(PropsKeys.LAYOUT_FIRST_PAGEABLE, filter));
067 _fullPageDisplayable = GetterUtil.getBoolean(
068 PropsUtil.get(PropsKeys.FULL_PAGE_DISPLAYABLE, filter));
069 _parentable = GetterUtil.getBoolean(
070 PropsUtil.get(PropsKeys.LAYOUT_PARENTABLE, filter), true);
071 _sitemapable = GetterUtil.getBoolean(
072 PropsUtil.get(PropsKeys.LAYOUT_SITEMAPABLE, filter), true);
073 _url = GetterUtil.getString(
074 PropsUtil.get(PropsKeys.LAYOUT_URL, filter));
075 _urlFriendliable = GetterUtil.getBoolean(
076 PropsUtil.get(PropsKeys.LAYOUT_URL_FRIENDLIABLE, filter), true);
077 _viewPage = GetterUtil.getString(
078 PropsUtil.get(PropsKeys.LAYOUT_VIEW_PAGE, filter));
079 }
080
081 @Override
082 public String[] getConfigurationActionDelete() {
083 return _configurationActionDelete;
084 }
085
086 @Override
087 public String[] getConfigurationActionUpdate() {
088 return _configurationActionUpdate;
089 }
090
091 @Override
092 public String getType() {
093 return _type;
094 }
095
096 @Override
097 public String getURL() {
098 return _url;
099 }
100
101 public String getViewPath(String portletId) {
102 String path = StrutsUtil.TEXT_HTML_DIR;
103
104
105
106 if (Validator.isNotNull(portletId)) {
107 if (_type.equals(LayoutConstants.TYPE_PANEL)) {
108 path += "/portal/layout/view/panel.jsp";
109 }
110 else {
111 path += "/portal/layout/view/portlet.jsp";
112 }
113 }
114 else {
115 path = StrutsUtil.TEXT_HTML_DIR + _viewPage;
116 }
117
118 return path;
119 }
120
121 @Override
122 public String includeEditContent(
123 HttpServletRequest request, HttpServletResponse response,
124 Layout layout)
125 throws Exception {
126
127 ServletContext servletContext = (ServletContext)request.getAttribute(
128 WebKeys.CTX);
129
130 RequestDispatcher requestDispatcher =
131 DirectRequestDispatcherFactoryUtil.getRequestDispatcher(
132 servletContext, getEditPage());
133
134 UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
135
136 PipingServletResponse pipingServletResponse = new PipingServletResponse(
137 response, unsyncStringWriter);
138
139 requestDispatcher.include(request, pipingServletResponse);
140
141 return unsyncStringWriter.toString();
142 }
143
144 @Override
145 public boolean includeLayoutContent(
146 HttpServletRequest request, HttpServletResponse response,
147 Layout layout)
148 throws Exception {
149
150 ServletContext servletContext = (ServletContext)request.getAttribute(
151 WebKeys.CTX);
152
153 String portletId = ParamUtil.getString(request, "p_p_id");
154
155 String path = getViewPath(portletId);
156
157 RequestDispatcher requestDispatcher =
158 DirectRequestDispatcherFactoryUtil.getRequestDispatcher(
159 servletContext, path);
160
161 UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
162
163 PipingServletResponse pipingServletResponse = new PipingServletResponse(
164 response, unsyncStringWriter);
165
166 String contentType = pipingServletResponse.getContentType();
167
168 requestDispatcher.include(request, pipingServletResponse);
169
170 if (contentType != null) {
171 response.setContentType(contentType);
172 }
173
174 request.setAttribute(
175 WebKeys.LAYOUT_CONTENT, unsyncStringWriter.getStringBundler());
176
177 return false;
178 }
179
180 @Override
181 public boolean isBrowsable() {
182 return _browsable;
183 }
184
185 @Override
186 public boolean isCheckLayoutViewPermission() {
187 return true;
188 }
189
190 @Override
191 public boolean isFirstPageable() {
192 return _firstPageable;
193 }
194
195 @Override
196 public boolean isFullPageDisplayable() {
197 return _fullPageDisplayable;
198 }
199
200 @Override
201 public boolean isInstanceable() {
202 return true;
203 }
204
205 @Override
206 public boolean isParentable() {
207 return _parentable;
208 }
209
210 @Override
211 public boolean isSitemapable() {
212 return _sitemapable;
213 }
214
215 @Override
216 public boolean isURLFriendliable() {
217 return _urlFriendliable;
218 }
219
220 @Override
221 public boolean matches(
222 HttpServletRequest request, String friendlyURL, Layout layout) {
223
224 try {
225 Map<Locale, String> friendlyURLMap = layout.getFriendlyURLMap();
226
227 Collection<String> values = friendlyURLMap.values();
228
229 return values.contains(friendlyURL);
230 }
231 catch (SystemException se) {
232 throw new RuntimeException(se);
233 }
234 }
235
236 protected String getEditPage() {
237 return StrutsUtil.TEXT_HTML_DIR + _editPage;
238 }
239
240 private final boolean _browsable;
241 private final String[] _configurationActionDelete;
242 private final String[] _configurationActionUpdate;
243 private final String _editPage;
244 private final boolean _firstPageable;
245 private final boolean _fullPageDisplayable;
246 private final boolean _parentable;
247 private final boolean _sitemapable;
248 private final String _type;
249 private final String _url;
250 private final boolean _urlFriendliable;
251 private final String _viewPage;
252
253 }