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.PipingServletResponse;
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 
131             doTag(
132                 getPage(), _id, _showImage, _hideImage, _showMessage,
133                 _hideMessage, _defaultShowContent, _stateVar, servletContext,
134                 request, new PipingServletResponse(pageContext));
135 
136             return EVAL_PAGE;
137         }
138         catch (Exception e) {
139             throw new JspException(e);
140         }
141     }
142 
143     public void setId(String id) {
144         _id = id;
145     }
146 
147     public void setShowImage(String showImage) {
148         _showImage = showImage;
149     }
150 
151     public void setHideImage(String hideImage) {
152         _hideImage = hideImage;
153     }
154 
155     public void setShowMessage(String showMessage) {
156         _showMessage = showMessage;
157     }
158 
159     public void setHideMessage(String hideMessage) {
160         _hideMessage = hideMessage;
161     }
162 
163     public void setDefaultShowContent(boolean defaultShowContent) {
164         _defaultShowContent = defaultShowContent;
165     }
166 
167     public void setStateVar(String stateVar) {
168         _stateVar = stateVar;
169     }
170 
171     protected String getPage() {
172         return _PAGE;
173     }
174 
175     private static final String _PAGE = "/html/taglib/ui/toggle/page.jsp";
176 
177     private String _id;
178     private String _showImage;
179     private String _hideImage;
180     private String _showMessage;
181     private String _hideMessage;
182     private boolean _defaultShowContent = true;
183     private String _stateVar;
184 
185 }