[prev in list] [next in list] [prev in thread] [next in thread] 

List:       httpcomponents-commits
Subject:    svn commit: r967227 - in /httpcomponents/httpclient/trunk: RELEASE_NOTES.txt
From:       olegk () apache ! org
Date:       2010-07-23 19:45:47
Message-ID: 20100723194547.E37F92388A56 () eris ! apache ! org
[Download RAW message or body]

Author: olegk
Date: Fri Jul 23 19:45:47 2010
New Revision: 967227

URL: http://svn.apache.org/viewvc?rev=967227&view=rev
Log:
HTTPCLIENT-969: BasicCookieStore#getCookies() to return a copy of Cookie list 
Contributed by David Smiley <dsmiley at mitre.org>

Modified:
    httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java


Modified: httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/RELEASE_NOTES.txt?rev=967227&r1=967226&r2=967227&view=diff
 ==============================================================================
--- httpcomponents/httpclient/trunk/RELEASE_NOTES.txt (original)
+++ httpcomponents/httpclient/trunk/RELEASE_NOTES.txt Fri Jul 23 19:45:47 2010
@@ -1,6 +1,9 @@
 Changes since 4.1 ALPHA2
 -------------------
 
+* [HTTPCLIENT-969] BasicCookieStore#getCookies() to return a copy of Cookie list 
+  Contributed by David Smiley <dsmiley at mitre.org>
+
 * [HTTPCLIENT-965] Fixed problem with cache not honoring must-revalidate or 
   proxy-revalidate Cache-Control directives.
   Contributed by Jonathan Moore <jonathan_moore at comcast.com>

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java
                
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/ \
java/org/apache/http/impl/client/BasicCookieStore.java?rev=967227&r1=967226&r2=967227&view=diff
 ==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java \
                (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java \
Fri Jul 23 19:45:47 2010 @@ -27,12 +27,7 @@
 package org.apache.http.impl.client;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 import org.apache.http.annotation.GuardedBy;
 import org.apache.http.annotation.ThreadSafe;
@@ -50,23 +45,14 @@ import org.apache.http.cookie.CookieIden
 @ThreadSafe
 public class BasicCookieStore implements CookieStore, Serializable {
 
-    private static final long serialVersionUID = -1113466491038527240L;
+    private static final long serialVersionUID = -7581093305228232025L;
 
     @GuardedBy("this")
-    private final ArrayList<Cookie> cookies;
+    private final TreeSet<Cookie> cookies;
 
-    @GuardedBy("this")
-    private final Comparator<Cookie> cookieComparator;
-
-    // -------------------------------------------------------- Class Variables
-
-    /**
-     * Default constructor.
-     */
     public BasicCookieStore() {
         super();
-        this.cookies = new ArrayList<Cookie>();
-        this.cookieComparator = new CookieIdentityComparator();
+        this.cookies = new TreeSet<Cookie>(new CookieIdentityComparator());
     }
 
     /**
@@ -82,12 +68,7 @@ public class BasicCookieStore implements
     public synchronized void addCookie(Cookie cookie) {
         if (cookie != null) {
             // first remove any old cookie that is equivalent
-            for (Iterator<Cookie> it = cookies.iterator(); it.hasNext();) {
-                if (cookieComparator.compare(cookie, it.next()) == 0) {
-                    it.remove();
-                    break;
-                }
-            }
+            cookies.remove(cookie);
             if (!cookie.isExpired(new Date())) {
                 cookies.add(cookie);
             }
@@ -119,7 +100,8 @@ public class BasicCookieStore implements
      * @return an array of {@link Cookie cookies}.
      */
     public synchronized List<Cookie> getCookies() {
-        return Collections.unmodifiableList(this.cookies);
+        //create defensive copy so it won't be concurrently modified
+        return new ArrayList<Cookie>(cookies);
     }
 
     /**
@@ -144,11 +126,6 @@ public class BasicCookieStore implements
         return removed;
     }
 
-    @Override
-    public String toString() {
-        return cookies.toString();
-    }
-
     /**
      * Clears all cookies.
      */
@@ -156,4 +133,9 @@ public class BasicCookieStore implements
         cookies.clear();
     }
 
+    @Override
+    public synchronized String toString() {
+        return cookies.toString();
+    }
+
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic