1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
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 }