View Javadoc

1   /*
2    * $Id: CookieTag.java 471754 2006-11-06 14:55:09Z husted $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  package org.apache.struts.taglib.bean;
22  
23  import org.apache.struts.taglib.TagUtils;
24  import org.apache.struts.util.MessageResources;
25  
26  import javax.servlet.http.Cookie;
27  import javax.servlet.http.HttpServletRequest;
28  import javax.servlet.jsp.JspException;
29  import javax.servlet.jsp.tagext.TagSupport;
30  
31  import java.util.ArrayList;
32  
33  /**
34   * Define a scripting variable based on the value(s) of the specified cookie
35   * received with this request.
36   *
37   * @version $Rev: 471754 $ $Date: 2004-10-16 12:38:42 -0400 (Sat, 16 Oct 2004)
38   *          $
39   */
40  public class CookieTag extends TagSupport {
41      /**
42       * The message resources for this package.
43       */
44      protected static MessageResources messages =
45          MessageResources.getMessageResources(
46              "org.apache.struts.taglib.bean.LocalStrings");
47  
48      // ------------------------------------------------------------- Properties
49  
50      /**
51       * The name of the scripting variable that will be exposed as a page scope
52       * attribute.
53       */
54      protected String id = null;
55  
56      /**
57       * Return an array of Cookies if <code>multiple</code> is non-null.
58       */
59      protected String multiple = null;
60  
61      /**
62       * The name of the cookie whose value is to be exposed.
63       */
64      protected String name = null;
65  
66      /**
67       * The default value to return if no cookie of the specified name is
68       * found.
69       */
70      protected String value = null;
71  
72      public String getId() {
73          return (this.id);
74      }
75  
76      public void setId(String id) {
77          this.id = id;
78      }
79  
80      public String getMultiple() {
81          return (this.multiple);
82      }
83  
84      public void setMultiple(String multiple) {
85          this.multiple = multiple;
86      }
87  
88      public String getName() {
89          return (this.name);
90      }
91  
92      public void setName(String name) {
93          this.name = name;
94      }
95  
96      public String getValue() {
97          return (this.value);
98      }
99  
100     public void setValue(String value) {
101         this.value = value;
102     }
103 
104     // --------------------------------------------------------- Public Methods
105 
106     /**
107      * Retrieve the required property and expose it as a scripting variable.
108      *
109      * @throws JspException if a JSP exception has occurred
110      */
111     public int doStartTag() throws JspException {
112         // Retrieve the required cookie value(s)
113         ArrayList values = new ArrayList();
114         Cookie[] cookies =
115             ((HttpServletRequest) pageContext.getRequest()).getCookies();
116 
117         if (cookies == null) {
118             cookies = new Cookie[0];
119         }
120 
121         for (int i = 0; i < cookies.length; i++) {
122             if (name.equals(cookies[i].getName())) {
123                 values.add(cookies[i]);
124             }
125         }
126 
127         if ((values.size() < 1) && (value != null)) {
128             values.add(new Cookie(name, value));
129         }
130 
131         if (values.size() < 1) {
132             JspException e =
133                 new JspException(messages.getMessage("cookie.get", name));
134 
135             TagUtils.getInstance().saveException(pageContext, e);
136             throw e;
137         }
138 
139         // Expose an appropriate variable containing these results
140         if (multiple == null) {
141             Cookie cookie = (Cookie) values.get(0);
142 
143             pageContext.setAttribute(id, cookie);
144         } else {
145             cookies = new Cookie[values.size()];
146             pageContext.setAttribute(id, values.toArray(cookies));
147         }
148 
149         return (SKIP_BODY);
150     }
151 
152     /**
153      * Release all allocated resources.
154      */
155     public void release() {
156         super.release();
157         id = null;
158         multiple = null;
159         name = null;
160         value = null;
161     }
162 }