001 package org.apache.fulcrum.parser; 002 003 004 /* 005 * Licensed to the Apache Software Foundation (ASF) under one 006 * or more contributor license agreements. See the NOTICE file 007 * distributed with this work for additional information 008 * regarding copyright ownership. The ASF licenses this file 009 * to you under the Apache License, Version 2.0 (the 010 * "License"); you may not use this file except in compliance 011 * with the License. You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, 016 * software distributed under the License is distributed on an 017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 018 * KIND, either express or implied. See the License for the 019 * specific language governing permissions and limitations 020 * under the License. 021 */ 022 023 024 import javax.servlet.http.Cookie; 025 import javax.servlet.http.HttpServletRequest; 026 import javax.servlet.http.HttpServletResponse; 027 028 /** 029 * CookieParser is used to get and set values of Cookies on the Client 030 * Browser. You can use CookieParser to convert Cookie values to 031 * various types or to set Bean values with setParameters(). See the 032 * Servlet Spec for more information on Cookies. 033 * <p> 034 * Use set() or unset() to Create or Destroy Cookies. 035 * <p> 036 * NOTE: The name= portion of a name=value pair may be converted 037 * to lowercase or uppercase when the object is initialized and when 038 * new data is added. This behaviour is determined by the url.case.folding 039 * property in TurbineResources.properties. Adding a name/value pair may 040 * overwrite existing name=value pairs if the names match: 041 * 042 * <pre> 043 * CookieParser cp = data.getCookies(); 044 * cp.add("ERROR",1); 045 * cp.add("eRrOr",2); 046 * int result = cp.getInt("ERROR"); 047 * </pre> 048 * 049 * In the above example, result is 2. 050 * 051 * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a> 052 * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a> 053 * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a> 054 * @version $Id: DefaultCookieParser.java 812786 2009-09-09 07:01:49Z tv $ 055 */ 056 public class DefaultCookieParser 057 extends BaseValueParser 058 implements CookieParser 059 060 { 061 /** 062 * The servlet request objects to parse. 063 */ 064 private HttpServletRequest request; 065 private HttpServletResponse response; 066 067 /** 068 * Constructs a new CookieParser. 069 */ 070 public DefaultCookieParser() 071 { 072 super(); 073 } 074 075 /** 076 * Disposes the parser. 077 */ 078 public void dispose() 079 { 080 this.request = null; 081 super.dispose(); 082 } 083 084 /** 085 * Gets the servlet request. 086 * 087 * @return the servlet request object or null. 088 */ 089 public HttpServletRequest getRequest() 090 { 091 return this.request; 092 } 093 094 /** 095 * Sets the servlet request and response to be parsed. 096 * All previous cookies will be cleared. 097 * 098 * @param request the servlet request object. 099 * @param response the servlet response object 100 */ 101 public void setData (HttpServletRequest request, 102 HttpServletResponse response) 103 { 104 clear(); 105 106 String enc = request.getCharacterEncoding(); 107 setCharacterEncoding(enc != null ? enc : "US-ASCII"); 108 109 Cookie[] cookies = request.getCookies(); 110 111 getLogger().debug ("Number of Cookies "+cookies.length); 112 113 for (int i=0; i<cookies.length; i++) 114 { 115 String name = convert (cookies[i].getName()); 116 String value = cookies[i].getValue(); 117 getLogger().debug ("Adding "+name+"="+value); 118 add (name,value); 119 } 120 121 this.request = request; 122 this.response = response; 123 } 124 125 /** 126 * Set a cookie that will be stored on the client for 127 * the duration of the session. 128 */ 129 public void set (String name, String value) 130 { 131 set (name,value,AGE_SESSION); 132 } 133 134 /** 135 * Set a persisten cookie on the client that will expire 136 * after a maximum age (given in seconds). 137 */ 138 public void set (String name, String value, int seconds_age) 139 { 140 if (response == null) 141 { 142 throw new IllegalStateException("Servlet response not available"); 143 } 144 145 Cookie cookie = new Cookie (name,value); 146 cookie.setMaxAge (seconds_age); 147 cookie.setPath (request.getServletPath()); 148 response.addCookie (cookie); 149 } 150 151 /** 152 * Remove a previously set cookie from the client machine. 153 */ 154 public void unset (String name) 155 { 156 set (name," ",AGE_DELETE); 157 } 158 159 }