001
014
015 package com.liferay.portal.kernel.model.impl;
016
017 import com.liferay.portal.kernel.exception.SystemException;
018 import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
019 import com.liferay.portal.kernel.model.Layout;
020 import com.liferay.portal.kernel.model.LayoutTypeController;
021 import com.liferay.portal.kernel.util.StringPool;
022 import com.liferay.portal.kernel.util.WebKeys;
023
024 import java.util.Collection;
025 import java.util.Locale;
026 import java.util.Map;
027
028 import javax.servlet.RequestDispatcher;
029 import javax.servlet.ServletContext;
030 import javax.servlet.ServletResponse;
031 import javax.servlet.http.HttpServletRequest;
032 import javax.servlet.http.HttpServletResponse;
033
034
037 public abstract class BaseLayoutTypeControllerImpl
038 implements LayoutTypeController {
039
040 @Override
041 public String[] getConfigurationActionDelete() {
042 return StringPool.EMPTY_ARRAY;
043 }
044
045 @Override
046 public String[] getConfigurationActionUpdate() {
047 return StringPool.EMPTY_ARRAY;
048 }
049
050 @Override
051 public String getType() {
052 return StringPool.BLANK;
053 }
054
055 @Override
056 public String includeEditContent(
057 HttpServletRequest request, HttpServletResponse response,
058 Layout layout)
059 throws Exception {
060
061 RequestDispatcher requestDispatcher =
062 servletContext.getRequestDispatcher(getEditPage());
063
064 UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
065
066 ServletResponse servletResponse = createServletResponse(
067 response, unsyncStringWriter);
068
069 try {
070 addAttributes(request);
071
072 requestDispatcher.include(request, servletResponse);
073 }
074 finally {
075 removeAttributes(request);
076 }
077
078 return unsyncStringWriter.toString();
079 }
080
081 @Override
082 public boolean includeLayoutContent(
083 HttpServletRequest request, HttpServletResponse response,
084 Layout layout)
085 throws Exception {
086
087 RequestDispatcher requestDispatcher =
088 servletContext.getRequestDispatcher(getViewPage());
089
090 UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
091
092 ServletResponse servletResponse = createServletResponse(
093 response, unsyncStringWriter);
094
095 String contentType = servletResponse.getContentType();
096 String includeServletPath = (String)request.getAttribute(
097 RequestDispatcher.INCLUDE_SERVLET_PATH);
098
099 try {
100 addAttributes(request);
101
102 requestDispatcher.include(request, servletResponse);
103 }
104 finally {
105 removeAttributes(request);
106
107 request.setAttribute(
108 RequestDispatcher.INCLUDE_SERVLET_PATH, includeServletPath);
109 }
110
111 if (contentType != null) {
112 response.setContentType(contentType);
113 }
114
115 request.setAttribute(
116 WebKeys.LAYOUT_CONTENT, unsyncStringWriter.getStringBundler());
117
118 return false;
119 }
120
121 @Override
122 public boolean isBrowsable() {
123 return true;
124 }
125
126 @Override
127 public boolean isCheckLayoutViewPermission() {
128 return true;
129 }
130
131 @Override
132 public boolean isFullPageDisplayable() {
133 return false;
134 }
135
136 @Override
137 public boolean isInstanceable() {
138 return true;
139 }
140
141 @Override
142 public boolean matches(
143 HttpServletRequest request, String friendlyURL, Layout layout) {
144
145 try {
146 Map<Locale, String> friendlyURLMap = layout.getFriendlyURLMap();
147
148 Collection<String> values = friendlyURLMap.values();
149
150 return values.contains(friendlyURL);
151 }
152 catch (SystemException se) {
153 throw new RuntimeException(se);
154 }
155 }
156
157 protected void addAttributes(HttpServletRequest request) {
158 }
159
160 protected abstract ServletResponse createServletResponse(
161 HttpServletResponse response, UnsyncStringWriter unsyncStringWriter);
162
163 protected abstract String getEditPage();
164
165 protected abstract String getViewPage();
166
167 protected void removeAttributes(HttpServletRequest request) {
168 }
169
170 protected ServletContext servletContext;
171
172 }