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.taglib.ui;
016    
017    import com.liferay.portal.kernel.servlet.DirectRequestDispatcherFactoryUtil;
018    import com.liferay.portal.kernel.util.DeterminateKeyGenerator;
019    import com.liferay.portal.kernel.util.StringPool;
020    import com.liferay.portal.kernel.util.Validator;
021    import com.liferay.portal.kernel.util.WebKeys;
022    import com.liferay.portal.theme.ThemeDisplay;
023    import com.liferay.portal.util.SessionClicks;
024    import com.liferay.taglib.servlet.PipingServletResponse;
025    import com.liferay.taglib.util.IncludeTag;
026    
027    import javax.servlet.RequestDispatcher;
028    import javax.servlet.ServletContext;
029    import javax.servlet.http.HttpServletRequest;
030    import javax.servlet.http.HttpServletResponse;
031    import javax.servlet.jsp.JspException;
032    
033    /**
034     * @author Brian Wing Shun Chan
035     */
036    public class ToggleTag extends IncludeTag {
037    
038            public static void doTag(
039                            String id, String showImage, String hideImage, String showMessage,
040                            String hideMessage, boolean defaultShowContent, String stateVar,
041                            ServletContext servletContext, HttpServletRequest request,
042                            HttpServletResponse response)
043                    throws Exception {
044    
045                    doTag(
046                            _PAGE, id, showImage, hideImage, showMessage, hideMessage,
047                            defaultShowContent, stateVar, servletContext, request, response);
048            }
049    
050            public static void doTag(
051                            String page, String id, String showImage, String hideImage,
052                            String showMessage, String hideMessage, boolean defaultShowContent,
053                            String stateVar, ServletContext servletContext,
054                            HttpServletRequest request, HttpServletResponse response)
055                    throws Exception {
056    
057                    ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
058                            WebKeys.THEME_DISPLAY);
059    
060                    if (Validator.isNull(showImage) && Validator.isNull(showMessage)) {
061                            showImage =
062                                    themeDisplay.getPathThemeImages() + "/arrows/01_down.png";
063                    }
064    
065                    if (Validator.isNull(hideImage) && Validator.isNull(hideImage)) {
066                            hideImage =
067                                    themeDisplay.getPathThemeImages() + "/arrows/01_right.png";
068                    }
069    
070                    String defaultStateValue =
071                            defaultShowContent ? StringPool.BLANK : "none";
072                    String defaultImage = defaultShowContent ? hideImage : showImage;
073                    String defaultMessage = defaultShowContent ? hideMessage : showMessage;
074    
075                    String clickValue = SessionClicks.get(request, id, null);
076    
077                    if (defaultShowContent) {
078                            if ((clickValue != null) && clickValue.equals("none")) {
079                                    defaultStateValue = "none";
080                                    defaultImage = showImage;
081                                    defaultMessage = showMessage;
082                            }
083                            else {
084                                    defaultStateValue = "";
085                                    defaultImage = hideImage;
086                                    defaultMessage = hideMessage;
087                            }
088                    }
089                    else {
090                            if ((clickValue == null) || clickValue.equals("none")) {
091                                    defaultStateValue = "none";
092                                    defaultImage = showImage;
093                                    defaultMessage = showMessage;
094                            }
095                            else {
096                                    defaultStateValue = "";
097                                    defaultImage = hideImage;
098                                    defaultMessage = hideMessage;
099                            }
100                    }
101    
102                    if (stateVar == null) {
103                            stateVar = DeterminateKeyGenerator.generate(
104                                    ToggleTag.class.getName());
105                    }
106    
107                    request.setAttribute("liferay-ui:toggle:id", id);
108                    request.setAttribute("liferay-ui:toggle:showImage", showImage);
109                    request.setAttribute("liferay-ui:toggle:hideImage", hideImage);
110                    request.setAttribute("liferay-ui:toggle:showMessage", showMessage);
111                    request.setAttribute("liferay-ui:toggle:hideMessage", hideMessage);
112                    request.setAttribute("liferay-ui:toggle:stateVar", stateVar);
113                    request.setAttribute(
114                            "liferay-ui:toggle:defaultStateValue", defaultStateValue);
115                    request.setAttribute("liferay-ui:toggle:defaultImage", defaultImage);
116                    request.setAttribute(
117                            "liferay-ui:toggle:defaultMessage", defaultMessage);
118    
119                    RequestDispatcher requestDispatcher =
120                            DirectRequestDispatcherFactoryUtil.getRequestDispatcher(
121                                    servletContext, page);
122    
123                    requestDispatcher.include(request, response);
124            }
125    
126            @Override
127            public int doEndTag() throws JspException {
128                    try {
129                            doTag(
130                                    getPage(), _id, _showImage, _hideImage, _showMessage,
131                                    _hideMessage, _defaultShowContent, _stateVar, servletContext,
132                                    request, new PipingServletResponse(pageContext));
133    
134                            return EVAL_PAGE;
135                    }
136                    catch (Exception e) {
137                            throw new JspException(e);
138                    }
139            }
140    
141            public void setDefaultShowContent(boolean defaultShowContent) {
142                    _defaultShowContent = defaultShowContent;
143            }
144    
145            public void setHideImage(String hideImage) {
146                    _hideImage = hideImage;
147            }
148    
149            public void setHideMessage(String hideMessage) {
150                    _hideMessage = hideMessage;
151            }
152    
153            public void setId(String id) {
154                    _id = id;
155            }
156    
157            public void setShowImage(String showImage) {
158                    _showImage = showImage;
159            }
160    
161            public void setShowMessage(String showMessage) {
162                    _showMessage = showMessage;
163            }
164    
165            public void setStateVar(String stateVar) {
166                    _stateVar = stateVar;
167            }
168    
169            @Override
170            protected String getPage() {
171                    return _PAGE;
172            }
173    
174            private static final String _PAGE = "/html/taglib/ui/toggle/page.jsp";
175    
176            private boolean _defaultShowContent = true;
177            private String _hideImage;
178            private String _hideMessage;
179            private String _id;
180            private String _showImage;
181            private String _showMessage;
182            private String _stateVar;
183    
184    }