001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.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.util.StringPool;
020    import com.liferay.portal.kernel.util.WebKeys;
021    import com.liferay.portal.model.Layout;
022    import com.liferay.portal.model.LayoutTypeController;
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    /**
035     * @author Eudaldo Alonso
036     */
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    }