1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.taglib.ui;
16  
17  import com.liferay.portal.kernel.servlet.StringServletResponse;
18  import com.liferay.portal.kernel.util.DeterminateKeyGenerator;
19  import com.liferay.portal.kernel.util.StringPool;
20  import com.liferay.portal.kernel.util.Validator;
21  import com.liferay.portal.kernel.util.WebKeys;
22  import com.liferay.portal.theme.ThemeDisplay;
23  import com.liferay.portal.util.SessionClicks;
24  import com.liferay.taglib.util.IncludeTag;
25  
26  import javax.servlet.RequestDispatcher;
27  import javax.servlet.ServletContext;
28  import javax.servlet.http.HttpServletRequest;
29  import javax.servlet.http.HttpServletResponse;
30  import javax.servlet.jsp.JspException;
31  
32  /**
33   * <a href="ToggleTag.java.html"><b><i>View Source</i></b></a>
34   *
35   * @author Brian Wing Shun Chan
36   */
37  public class ToggleTag extends IncludeTag {
38  
39      public static void doTag(
40              String id, String showImage, String hideImage, String showMessage,
41              String hideMessage, boolean defaultShowContent, String stateVar,
42              ServletContext servletContext, HttpServletRequest request,
43              HttpServletResponse response)
44          throws Exception {
45  
46          doTag(
47              _PAGE, id, showImage, hideImage, showMessage, hideMessage,
48              defaultShowContent, stateVar, servletContext, request, response);
49      }
50  
51      public static void doTag(
52              String page, String id, String showImage, String hideImage,
53              String showMessage, String hideMessage, boolean defaultShowContent,
54              String stateVar, ServletContext servletContext,
55              HttpServletRequest request, HttpServletResponse response)
56          throws Exception {
57  
58          ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
59              WebKeys.THEME_DISPLAY);
60  
61          if (Validator.isNull(showImage) && Validator.isNull(showMessage)) {
62              showImage =
63                  themeDisplay.getPathThemeImages() + "/arrows/01_down.png";
64          }
65  
66          if (Validator.isNull(hideImage) && Validator.isNull(hideImage)) {
67              hideImage =
68                  themeDisplay.getPathThemeImages() + "/arrows/01_right.png";
69          }
70  
71          String defaultStateValue =
72              defaultShowContent ? StringPool.BLANK : "none";
73          String defaultImage = defaultShowContent ? hideImage : showImage;
74          String defaultMessage = defaultShowContent ? hideMessage : showMessage;
75  
76          String clickValue = SessionClicks.get(request, id, null);
77  
78          if (defaultShowContent) {
79              if ((clickValue != null) && (clickValue.equals("none"))) {
80                  defaultStateValue = "none";
81                  defaultImage = showImage;
82                  defaultMessage = showMessage;
83              }
84              else {
85                  defaultStateValue = "";
86                  defaultImage = hideImage;
87                  defaultMessage = hideMessage;
88              }
89          }
90          else {
91              if ((clickValue == null) || (clickValue.equals("none"))) {
92                  defaultStateValue = "none";
93                  defaultImage = showImage;
94                  defaultMessage = showMessage;
95              }
96              else {
97                  defaultStateValue = "";
98                  defaultImage = hideImage;
99                  defaultMessage = hideMessage;
100             }
101         }
102 
103         if (stateVar == null) {
104             stateVar = DeterminateKeyGenerator.generate(
105                 ToggleTag.class.getName());
106         }
107 
108         request.setAttribute("liferay-ui:toggle:id", id);
109         request.setAttribute("liferay-ui:toggle:showImage", showImage);
110         request.setAttribute("liferay-ui:toggle:hideImage", hideImage);
111         request.setAttribute("liferay-ui:toggle:showMessage", showMessage);
112         request.setAttribute("liferay-ui:toggle:hideMessage", hideMessage);
113         request.setAttribute("liferay-ui:toggle:stateVar", stateVar);
114         request.setAttribute(
115             "liferay-ui:toggle:defaultStateValue", defaultStateValue);
116         request.setAttribute("liferay-ui:toggle:defaultImage", defaultImage);
117         request.setAttribute(
118             "liferay-ui:toggle:defaultMessage", defaultMessage);
119 
120         RequestDispatcher requestDispatcher =
121             servletContext.getRequestDispatcher(page);
122 
123         requestDispatcher.include(request, response);
124     }
125 
126     public int doEndTag() throws JspException {
127         try {
128             ServletContext servletContext = getServletContext();
129             HttpServletRequest request = getServletRequest();
130             StringServletResponse response = getServletResponse();
131 
132             doTag(
133                 getPage(), _id, _showImage, _hideImage, _showMessage,
134                 _hideMessage, _defaultShowContent, _stateVar, servletContext,
135                 request, response);
136 
137             pageContext.getOut().print(response.getString());
138 
139             return EVAL_PAGE;
140         }
141         catch (Exception e) {
142             throw new JspException(e);
143         }
144     }
145 
146     public void setId(String id) {
147         _id = id;
148     }
149 
150     public void setShowImage(String showImage) {
151         _showImage = showImage;
152     }
153 
154     public void setHideImage(String hideImage) {
155         _hideImage = hideImage;
156     }
157 
158     public void setShowMessage(String showMessage) {
159         _showMessage = showMessage;
160     }
161 
162     public void setHideMessage(String hideMessage) {
163         _hideMessage = hideMessage;
164     }
165 
166     public void setDefaultShowContent(boolean defaultShowContent) {
167         _defaultShowContent = defaultShowContent;
168     }
169 
170     public void setStateVar(String stateVar) {
171         _stateVar = stateVar;
172     }
173 
174     protected String getDefaultPage() {
175         return _PAGE;
176     }
177 
178     private static final String _PAGE = "/html/taglib/ui/toggle/page.jsp";
179 
180     private String _id;
181     private String _showImage;
182     private String _hideImage;
183     private String _showMessage;
184     private String _hideMessage;
185     private boolean _defaultShowContent = true;
186     private String _stateVar;
187 
188 }