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 }