001    /**
002     * Copyright (c) 2000-2012 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.taglib.ui;
016    
017    import com.liferay.portal.kernel.servlet.PortalIncludeUtil;
018    import com.liferay.portal.kernel.servlet.taglib.BaseBodyTagSupport;
019    import com.liferay.portal.kernel.util.IntegerWrapper;
020    import com.liferay.portal.kernel.util.StringPool;
021    import com.liferay.portal.kernel.util.Validator;
022    import com.liferay.util.PwdGenerator;
023    
024    import javax.servlet.http.HttpServletRequest;
025    import javax.servlet.jsp.JspException;
026    import javax.servlet.jsp.tagext.BodyTag;
027    
028    /**
029     * @author Brian Wing Shun Chan
030     */
031    public class PanelFloatingContainerTag
032            extends BaseBodyTagSupport implements BodyTag {
033    
034            @Override
035            public int doAfterBody() {
036                    HttpServletRequest request =
037                            (HttpServletRequest)pageContext.getRequest();
038    
039                    IntegerWrapper panelCount = (IntegerWrapper)request.getAttribute(
040                            "liferay-ui:panel-container:panelCount" + _id);
041    
042                    if ((panelCount != null) && (panelCount.getValue() == 1)) {
043    
044                            bodyContent.clearBody();
045    
046                            return EVAL_BODY_AGAIN;
047                    }
048                    else {
049                            return SKIP_BODY;
050                    }
051            }
052    
053            @Override
054            public int doEndTag() throws JspException {
055                    try {
056                            HttpServletRequest request =
057                                    (HttpServletRequest)pageContext.getRequest();
058    
059                            IntegerWrapper panelCount = (IntegerWrapper)request.getAttribute(
060                                    "liferay-ui:panel-container:panelCount" + _id);
061    
062                            request.removeAttribute(
063                                    "liferay-ui:panel-container:panelCount" + _id);
064    
065                            if ((panelCount != null) && (panelCount.getValue() >= 1)) {
066                                    PortalIncludeUtil.include(pageContext, getStartPage());
067                            }
068    
069                            writeBodyContent(pageContext.getOut());
070    
071                            if ((panelCount != null) && (panelCount.getValue() >= 1)) {
072                                    PortalIncludeUtil.include(pageContext, getEndPage());
073                            }
074    
075                            request.removeAttribute("liferay-ui:panel-floating-container:id");
076                            request.removeAttribute(
077                                    "liferay-ui:panel-floating-container:trigger");
078                            request.removeAttribute(
079                                    "liferay-ui:panel-floating-container:accordion");
080                            request.removeAttribute(
081                                    "liferay-ui:panel-floating-container:persistState");
082                            request.removeAttribute(
083                                    "liferay-ui:panel-floating-container:paging");
084                            request.removeAttribute(
085                                    "liferay-ui:panel-floating-container:pagingElements");
086                            request.removeAttribute(
087                                    "liferay-ui:panel-floating-container:resultsPerPage");
088                            request.removeAttribute(
089                                    "liferay-ui:panel-floating-container:width");
090                            request.removeAttribute(
091                                    "liferay-ui:panel-floating-container:extended");
092                            request.removeAttribute(
093                                    "liferay-ui:panel-floating-container:cssClass");
094    
095                            return EVAL_PAGE;
096                    }
097                    catch (Exception e) {
098                            throw new JspException(e);
099                    }
100            }
101    
102            @Override
103            public int doStartTag() {
104                    HttpServletRequest request =
105                            (HttpServletRequest)pageContext.getRequest();
106    
107                    if (Validator.isNull(_id)) {
108                            _id = PwdGenerator.getPassword(PwdGenerator.KEY3, 4);
109                    }
110    
111                    request.setAttribute("liferay-ui:panel-floating-container:id", _id);
112                    request.setAttribute(
113                            "liferay-ui:panel-floating-container:trigger", _trigger);
114                    request.setAttribute(
115                            "liferay-ui:panel-floating-container:accordion",
116                            String.valueOf(_accordion));
117                    request.setAttribute(
118                            "liferay-ui:panel-floating-container:persistState",
119                            String.valueOf(_persistState));
120                    request.setAttribute(
121                            "liferay-ui:panel-floating-container:paging",
122                            String.valueOf(_paging));
123                    request.setAttribute(
124                            "liferay-ui:panel-floating-container:pagingElements",
125                            _pagingElements);
126                    request.setAttribute(
127                            "liferay-ui:panel-floating-container:resultsPerPage",
128                            String.valueOf(_resultsPerPage));
129                    request.setAttribute(
130                            "liferay-ui:panel-floating-container:width",
131                            String.valueOf(_width));
132                    request.setAttribute(
133                            "liferay-ui:panel-floating-container:extended", _extended);
134                    request.setAttribute(
135                            "liferay-ui:panel-floating-container:cssClass", _cssClass);
136                    request.setAttribute(
137                            "liferay-ui:panel-container:panelCount" + _id,
138                            new IntegerWrapper());
139    
140                    return EVAL_BODY_BUFFERED;
141            }
142    
143            public String getId() {
144                    return _id;
145            }
146    
147            public void setAccordion(boolean accordion) {
148                    _accordion = accordion;
149            }
150    
151            public void setCssClass(String cssClass) {
152                    _cssClass = cssClass;
153            }
154    
155            public void setEndPage(String endPage) {
156                    _endPage = endPage;
157            }
158    
159            public void setExtended(Boolean extended) {
160                    _extended = extended;
161            }
162    
163            public void setId(String id) {
164                    _id = id;
165            }
166    
167            public void setPaging(boolean paging) {
168                    _paging = paging;
169            }
170    
171            public void setPagingElements(String pagingElements) {
172                    _pagingElements = pagingElements;
173            }
174    
175            public void setPersistState(boolean persistState) {
176                    _persistState = persistState;
177            }
178    
179            public void setResultsPerPage(int resultsPerPage) {
180                    _resultsPerPage = resultsPerPage;
181            }
182    
183            public void setStartPage(String startPage) {
184                    _startPage = startPage;
185            }
186    
187            public void setTrigger(String trigger) {
188                    _trigger = trigger;
189            }
190    
191            public void setWidth(int width) {
192                    _width = width;
193            }
194    
195            protected String getEndPage() {
196                    if (Validator.isNull(_endPage)) {
197                            return _END_PAGE;
198                    }
199                    else {
200                            return _endPage;
201                    }
202            }
203    
204            protected String getStartPage() {
205                    if (Validator.isNull(_startPage)) {
206                            return _START_PAGE;
207                    }
208                    else {
209                            return _startPage;
210                    }
211            }
212    
213            private static final String _END_PAGE =
214                    "/html/taglib/ui/panel_floating_container/end.jsp";
215    
216            private static final String _START_PAGE =
217                    "/html/taglib/ui/panel_floating_container/start.jsp";
218    
219            private boolean _accordion;
220            private String _cssClass = StringPool.BLANK;
221            private String _endPage;
222            private Boolean _extended;
223            private String _id;
224            private boolean _paging;
225            private String _pagingElements = "ul";
226            private boolean _persistState;
227            private int _resultsPerPage = 1;
228            private String _startPage;
229            private String _trigger;
230            private int _width = 300;
231    
232    }