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