1/* 2 * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java $ 3 * $Revision: 604625 $ 4 * $Date: 2007-12-16 06:11:11 -0800 (Sun, 16 Dec 2007) $ 5 * 6 * ==================================================================== 7 * Licensed to the Apache Software Foundation (ASF) under one 8 * or more contributor license agreements. See the NOTICE file 9 * distributed with this work for additional information 10 * regarding copyright ownership. The ASF licenses this file 11 * to you under the Apache License, Version 2.0 (the 12 * "License"); you may not use this file except in compliance 13 * with the License. You may obtain a copy of the License at 14 * 15 * http://www.apache.org/licenses/LICENSE-2.0 16 * 17 * Unless required by applicable law or agreed to in writing, 18 * software distributed under the License is distributed on an 19 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 20 * KIND, either express or implied. See the License for the 21 * specific language governing permissions and limitations 22 * under the License. 23 * ==================================================================== 24 * 25 * This software consists of voluntary contributions made by many 26 * individuals on behalf of the Apache Software Foundation. For more 27 * information on the Apache Software Foundation, please see 28 * <http://www.apache.org/>. 29 * 30 */ 31 32package org.apache.http.message; 33 34import org.apache.http.NameValuePair; 35import org.apache.http.util.CharArrayBuffer; 36import org.apache.http.util.LangUtils; 37 38/** 39 * A simple class encapsulating an attribute/value pair. 40 * <p> 41 * This class comforms to the generic grammar and formatting rules outlined in the 42 * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2">Section 2.2</a> 43 * and 44 * <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6">Section 3.6</a> 45 * of <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">RFC 2616</a> 46 * </p> 47 * <h>2.2 Basic Rules</h> 48 * <p> 49 * The following rules are used throughout this specification to describe basic parsing constructs. 50 * The US-ASCII coded character set is defined by ANSI X3.4-1986. 51 * </p> 52 * <pre> 53 * OCTET = <any 8-bit sequence of data> 54 * CHAR = <any US-ASCII character (octets 0 - 127)> 55 * UPALPHA = <any US-ASCII uppercase letter "A".."Z"> 56 * LOALPHA = <any US-ASCII lowercase letter "a".."z"> 57 * ALPHA = UPALPHA | LOALPHA 58 * DIGIT = <any US-ASCII digit "0".."9"> 59 * CTL = <any US-ASCII control character 60 * (octets 0 - 31) and DEL (127)> 61 * CR = <US-ASCII CR, carriage return (13)> 62 * LF = <US-ASCII LF, linefeed (10)> 63 * SP = <US-ASCII SP, space (32)> 64 * HT = <US-ASCII HT, horizontal-tab (9)> 65 * <"> = <US-ASCII double-quote mark (34)> 66 * </pre> 67 * <p> 68 * Many HTTP/1.1 header field values consist of words separated by LWS or special 69 * characters. These special characters MUST be in a quoted string to be used within 70 * a parameter value (as defined in section 3.6). 71 * <p> 72 * <pre> 73 * token = 1*<any CHAR except CTLs or separators> 74 * separators = "(" | ")" | "<" | ">" | "@" 75 * | "," | ";" | ":" | "\" | <"> 76 * | "/" | "[" | "]" | "?" | "=" 77 * | "{" | "}" | SP | HT 78 * </pre> 79 * <p> 80 * A string of text is parsed as a single word if it is quoted using double-quote marks. 81 * </p> 82 * <pre> 83 * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) 84 * qdtext = <any TEXT except <">> 85 * </pre> 86 * <p> 87 * The backslash character ("\") MAY be used as a single-character quoting mechanism only 88 * within quoted-string and comment constructs. 89 * </p> 90 * <pre> 91 * quoted-pair = "\" CHAR 92 * </pre> 93 * <h>3.6 Transfer Codings</h> 94 * <p> 95 * Parameters are in the form of attribute/value pairs. 96 * </p> 97 * <pre> 98 * parameter = attribute "=" value 99 * attribute = token 100 * value = token | quoted-string 101 * </pre> 102 * 103 * @author <a href="mailto:oleg at ural.com">Oleg Kalnichevski</a> 104 * 105 * 106 * @deprecated Please use {@link java.net.URL#openConnection} instead. 107 * Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a> 108 * for further details. 109 */ 110@Deprecated 111public class BasicNameValuePair implements NameValuePair, Cloneable { 112 113 private final String name; 114 private final String value; 115 116 /** 117 * Default Constructor taking a name and a value. The value may be null. 118 * 119 * @param name The name. 120 * @param value The value. 121 */ 122 public BasicNameValuePair(final String name, final String value) { 123 super(); 124 if (name == null) { 125 throw new IllegalArgumentException("Name may not be null"); 126 } 127 this.name = name; 128 this.value = value; 129 } 130 131 /** 132 * Returns the name. 133 * 134 * @return String name The name 135 */ 136 public String getName() { 137 return this.name; 138 } 139 140 /** 141 * Returns the value. 142 * 143 * @return String value The current value. 144 */ 145 public String getValue() { 146 return this.value; 147 } 148 149 150 /** 151 * Get a string representation of this pair. 152 * 153 * @return A string representation. 154 */ 155 public String toString() { 156 // don't call complex default formatting for a simple toString 157 158 int len = this.name.length(); 159 if (this.value != null) 160 len += 1 + this.value.length(); 161 CharArrayBuffer buffer = new CharArrayBuffer(len); 162 163 buffer.append(this.name); 164 if (this.value != null) { 165 buffer.append("="); 166 buffer.append(this.value); 167 } 168 return buffer.toString(); 169 } 170 171 public boolean equals(final Object object) { 172 if (object == null) return false; 173 if (this == object) return true; 174 if (object instanceof NameValuePair) { 175 BasicNameValuePair that = (BasicNameValuePair) object; 176 return this.name.equals(that.name) 177 && LangUtils.equals(this.value, that.value); 178 } else { 179 return false; 180 } 181 } 182 183 public int hashCode() { 184 int hash = LangUtils.HASH_SEED; 185 hash = LangUtils.hashCode(hash, this.name); 186 hash = LangUtils.hashCode(hash, this.value); 187 return hash; 188 } 189 190 public Object clone() throws CloneNotSupportedException { 191 return super.clone(); 192 } 193 194} 195