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