1 /* 2 * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/cookie/BestMatchSpec.java $ 3 * $Revision: 657334 $ 4 * $Date: 2008-05-17 04:44:16 -0700 (Sat, 17 May 2008) $ 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 32 package org.apache.http.impl.cookie; 33 34 import java.util.List; 35 36 import org.apache.http.Header; 37 import org.apache.http.HeaderElement; 38 import org.apache.http.cookie.Cookie; 39 import org.apache.http.cookie.CookieOrigin; 40 import org.apache.http.cookie.CookieSpec; 41 import org.apache.http.cookie.MalformedCookieException; 42 43 /** 44 * 'Meta' cookie specification that selects a cookie policy depending 45 * on the format of the cookie(s) 46 * 47 * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a> 48 * 49 * @since 4.0 50 * 51 * @deprecated Please use {@link java.net.URL#openConnection} instead. 52 * Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a> 53 * for further details. 54 */ 55 @Deprecated 56 public class BestMatchSpec implements CookieSpec { 57 58 private final String[] datepatterns; 59 private final boolean oneHeader; 60 61 private RFC2965Spec strict; 62 private BrowserCompatSpec compat; 63 private NetscapeDraftSpec netscape; 64 65 public BestMatchSpec(final String[] datepatterns, boolean oneHeader) { 66 super(); 67 this.datepatterns = datepatterns; 68 this.oneHeader = oneHeader; 69 } 70 71 public BestMatchSpec() { 72 this(null, false); 73 } 74 75 private RFC2965Spec getStrict() { 76 if (this.strict == null) { 77 this.strict = new RFC2965Spec(this.datepatterns, this.oneHeader); 78 } 79 return strict; 80 } 81 82 private BrowserCompatSpec getCompat() { 83 if (this.compat == null) { 84 this.compat = new BrowserCompatSpec(this.datepatterns); 85 } 86 return compat; 87 } 88 89 private NetscapeDraftSpec getNetscape() { 90 if (this.netscape == null) { 91 String[] patterns = this.datepatterns; 92 if (patterns == null) { 93 patterns = BrowserCompatSpec.DATE_PATTERNS; 94 } 95 this.netscape = new NetscapeDraftSpec(patterns); 96 } 97 return netscape; 98 } 99 100 public List<Cookie> parse( 101 final Header header, 102 final CookieOrigin origin) throws MalformedCookieException { 103 if (header == null) { 104 throw new IllegalArgumentException("Header may not be null"); 105 } 106 if (origin == null) { 107 throw new IllegalArgumentException("Cookie origin may not be null"); 108 } 109 HeaderElement[] helems = header.getElements(); 110 boolean versioned = false; 111 boolean netscape = false; 112 for (HeaderElement helem: helems) { 113 if (helem.getParameterByName("version") != null) { 114 versioned = true; 115 } 116 if (helem.getParameterByName("expires") != null) { 117 netscape = true; 118 } 119 } 120 if (netscape) { 121 122 } 123 // Do we have a cookie with a version attribute? 124 if (versioned) { 125 return getStrict().parse(helems, origin); 126 } else if (netscape) { 127 // Need to parse the header again, 128 // because Netscape draft cannot handle 129 // comma separators 130 return getNetscape().parse(header, origin); 131 } else { 132 return getCompat().parse(helems, origin); 133 } 134 } 135 136 public void validate( 137 final Cookie cookie, 138 final CookieOrigin origin) throws MalformedCookieException { 139 if (cookie == null) { 140 throw new IllegalArgumentException("Cookie may not be null"); 141 } 142 if (origin == null) { 143 throw new IllegalArgumentException("Cookie origin may not be null"); 144 } 145 if (cookie.getVersion() > 0) { 146 getStrict().validate(cookie, origin); 147 } else { 148 getCompat().validate(cookie, origin); 149 } 150 } 151 152 public boolean match(final Cookie cookie, final CookieOrigin origin) { 153 if (cookie == null) { 154 throw new IllegalArgumentException("Cookie may not be null"); 155 } 156 if (origin == null) { 157 throw new IllegalArgumentException("Cookie origin may not be null"); 158 } 159 if (cookie.getVersion() > 0) { 160 return getStrict().match(cookie, origin); 161 } else { 162 return getCompat().match(cookie, origin); 163 } 164 } 165 166 public List<Header> formatCookies(final List<Cookie> cookies) { 167 if (cookies == null) { 168 throw new IllegalArgumentException("List of cookie may not be null"); 169 } 170 int version = Integer.MAX_VALUE; 171 for (Cookie cookie: cookies) { 172 if (cookie.getVersion() < version) { 173 version = cookie.getVersion(); 174 } 175 } 176 if (version > 0) { 177 return getStrict().formatCookies(cookies); 178 } else { 179 return getCompat().formatCookies(cookies); 180 } 181 } 182 183 public int getVersion() { 184 return getStrict().getVersion(); 185 } 186 187 public Header getVersionHeader() { 188 return getStrict().getVersionHeader(); 189 } 190 191 }