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