You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/12/16 15:11:13 UTC

svn commit: r604625 - in /jakarta/httpcomponents/httpcore/trunk: ./ module-main/src/main/java/org/apache/http/entity/ module-main/src/main/java/org/apache/http/message/ module-main/src/main/java/org/apache/http/params/ module-main/src/test/java/org/apa...

Author: olegk
Date: Sun Dec 16 06:11:11 2007
New Revision: 604625

URL: http://svn.apache.org/viewvc?rev=604625&view=rev
Log:
HTTPCORE-133:  Clone support for basic HTTP message elements and non-streaming entities

Modified:
    jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/ByteArrayEntity.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/FileEntity.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/StringEntity.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderElement.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BufferedHeader.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderGroup.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/BasicHttpParams.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeader.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderElement.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderGroup.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestRequestLine.java
    jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestStatusLine.java

Modified: jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt (original)
+++ jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt Sun Dec 16 06:11:11 2007
@@ -1,5 +1,9 @@
 Changes since 4.0 Alpha 6
 
+* [HTTPCORE-133] Clone support for basic HTTP message elements and 
+  non-streaming entities.
+  Contributed by Oleg Kalnichevski <olegk at apache.org>
+
 * [HTTPCORE-127] Improved API for lifecycle management of listening I/O
   reactors. One can now suspend and resume listener endpoints.
   Contributed by Asankha C. Perera <asankha at wso2.com>

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/ByteArrayEntity.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/ByteArrayEntity.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/ByteArrayEntity.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/ByteArrayEntity.java Sun Dec 16 06:11:11 2007
@@ -45,7 +45,7 @@
  * 
  * @since 4.0
  */
-public class ByteArrayEntity extends AbstractHttpEntity {
+public class ByteArrayEntity extends AbstractHttpEntity implements Cloneable {
 
     protected final byte[] content;
 
@@ -87,5 +87,8 @@
         return false;
     }
 
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
 
 } // class ByteArrayEntity

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/FileEntity.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/FileEntity.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/FileEntity.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/FileEntity.java Sun Dec 16 06:11:11 2007
@@ -46,7 +46,7 @@
  * 
  * @since 4.0
  */
-public class FileEntity extends AbstractHttpEntity {
+public class FileEntity extends AbstractHttpEntity implements Cloneable {
 
     protected final File file; 
 
@@ -95,6 +95,12 @@
      */
     public boolean isStreaming() {
         return false;
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        // File instance is considered immutable
+        // No need to make a copy of it
+        return super.clone();
     }
 
 } // class FileEntity

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/StringEntity.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/StringEntity.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/StringEntity.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/entity/StringEntity.java Sun Dec 16 06:11:11 2007
@@ -48,7 +48,7 @@
  * 
  * @since 4.0
  */
-public class StringEntity extends AbstractHttpEntity {
+public class StringEntity extends AbstractHttpEntity implements Cloneable {
 
     protected final byte[] content;
 
@@ -97,6 +97,10 @@
      */
     public boolean isStreaming() {
         return false;
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
     }
 
 } // class StringEntity

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeader.java Sun Dec 16 06:11:11 2007
@@ -63,7 +63,7 @@
  * 
  * @since 4.0
  */
-public class BasicHeader implements Header {
+public class BasicHeader implements Header, Cloneable {
 
     /**
      * Header name.
@@ -136,4 +136,8 @@
         }
     }
 
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+ 
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderElement.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderElement.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderElement.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicHeaderElement.java Sun Dec 16 06:11:11 2007
@@ -80,7 +80,7 @@
  * 
  * @since 4.0
  */
-public class BasicHeaderElement implements HeaderElement {
+public class BasicHeaderElement implements HeaderElement, Cloneable {
 
     private final String name;
     private final String value;
@@ -233,5 +233,11 @@
         return buffer.toString();
     }
     
+    public Object clone() throws CloneNotSupportedException {
+        // parameters array is considered immutable
+        // no need to make a copy of it
+        return super.clone();
+    }
+ 
 }
 

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicNameValuePair.java Sun Dec 16 06:11:11 2007
@@ -103,7 +103,7 @@
  * @author <a href="mailto:oleg at ural.com">Oleg Kalnichevski</a>
  * 
  */
-public class BasicNameValuePair implements NameValuePair {
+public class BasicNameValuePair implements NameValuePair, Cloneable {
 
     private final String name;
     private final String value;
@@ -182,4 +182,8 @@
         return hash;
     }
     
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+ 
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicRequestLine.java Sun Dec 16 06:11:11 2007
@@ -47,7 +47,7 @@
  * 
  * @since 4.0
  */
-public class BasicRequestLine implements RequestLine {
+public class BasicRequestLine implements RequestLine, Cloneable {
 
     private final ProtocolVersion protoversion;
     private final String method;
@@ -91,4 +91,9 @@
         return BasicLineFormatter.DEFAULT
             .formatRequestLine(null, this).toString();
     }
+    
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BasicStatusLine.java Sun Dec 16 06:11:11 2007
@@ -50,7 +50,7 @@
  * 
  * @since 4.0
  */
-public class BasicStatusLine implements StatusLine {
+public class BasicStatusLine implements StatusLine, Cloneable {
 
     // ----------------------------------------------------- Instance Variables
 
@@ -116,4 +116,9 @@
         return BasicLineFormatter.DEFAULT
             .formatStatusLine(null, this).toString();
     }
+    
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BufferedHeader.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BufferedHeader.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BufferedHeader.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/BufferedHeader.java Sun Dec 16 06:11:11 2007
@@ -46,7 +46,7 @@
  * <!-- empty lines above to avoid 'svn diff' context problems -->
  * @version $Revision$ $Date$
  */
-public class BufferedHeader implements FormattedHeader {
+public class BufferedHeader implements FormattedHeader, Cloneable {
 
     /**
      * Header name.
@@ -124,4 +124,10 @@
         return this.buffer.toString();
     }
 
+    public Object clone() throws CloneNotSupportedException {
+        // buffer is considered immutable
+        // no need to make a copy of it
+        return super.clone();
+    }
+ 
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderGroup.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderGroup.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderGroup.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/message/HeaderGroup.java Sun Dec 16 06:11:11 2007
@@ -47,7 +47,7 @@
  *
  * @since 4.0
  */
-public class HeaderGroup {
+public class HeaderGroup implements Cloneable {
 
     /** The list of headers for this group, in the order in which they were added */
     private List headers;
@@ -272,6 +272,12 @@
      */
     public HeaderIterator iterator(final String name) {
         return new BasicListHeaderIterator(this.headers, name);
+    }
+    
+    public Object clone() throws CloneNotSupportedException {
+        HeaderGroup clone = (HeaderGroup) super.clone();
+        clone.headers = new ArrayList(this.headers);
+        return clone;
     }
     
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/BasicHttpParams.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/BasicHttpParams.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/BasicHttpParams.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/params/BasicHttpParams.java Sun Dec 16 06:11:11 2007
@@ -52,7 +52,7 @@
 public final class BasicHttpParams extends AbstractHttpParams
     implements HttpLinkedParams, Serializable, Cloneable {
 
-    static final long serialVersionUID = 4571099216197814749L;
+    private static final long serialVersionUID = 4571099216197814749L;
 
     /**
      * The optional set of default values to defer to.

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeader.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeader.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeader.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeader.java Sun Dec 16 06:11:11 2007
@@ -105,5 +105,12 @@
         assertEquals(0, elements.length); 
     }
 
+    public void testCloning() throws Exception {
+        BasicHeader orig = new BasicHeader("name1", "value1");
+        BasicHeader clone = (BasicHeader) orig.clone();
+        assertEquals(orig.getName(), clone.getName());
+        assertEquals(orig.getValue(), clone.getValue());
+    }
+    
 }
 

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderElement.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderElement.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderElement.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderElement.java Sun Dec 16 06:11:11 2007
@@ -172,4 +172,15 @@
         element = BasicHeaderValueParser.parseHeaderElement(s, null);
         assertEquals(s, element.toString());
     }
+    
+    public void testCloning() throws Exception {
+        BasicHeaderElement orig = new BasicHeaderElement("name", "value", 
+                new NameValuePair[] {
+                    new BasicNameValuePair("param1", "value1"),
+                    new BasicNameValuePair("param2", "value2")
+                } );
+        BasicHeaderElement clone = (BasicHeaderElement) orig.clone();
+        assertEquals(orig, clone);
+    }
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderGroup.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderGroup.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderGroup.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestHeaderGroup.java Sun Dec 16 06:11:11 2007
@@ -154,4 +154,22 @@
         assertNotNull(i);
         assertFalse(i.hasNext());
     }
+    
+    public void testCloning() throws Exception {
+        HeaderGroup orig = new HeaderGroup();
+        Header header1 = new BasicHeader("name", "value1");
+        Header header2 = new BasicHeader("name", "value2");
+        Header header3 = new BasicHeader("name", "value3");
+        orig.setHeaders(new Header[] { header1, header2, header3 });
+        HeaderGroup clone = (HeaderGroup) orig.clone();
+        Header[] headers1 = orig.getAllHeaders();
+        Header[] headers2 = clone.getAllHeaders();
+        assertNotNull(headers1);
+        assertNotNull(headers2);
+        assertEquals(headers1.length, headers2.length);
+        for (int i = 0; i < headers1.length; i++) {
+            assertEquals(headers1[i], headers2[i]);
+        }
+    }
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestNameValuePair.java Sun Dec 16 06:11:11 2007
@@ -98,4 +98,11 @@
         NameValuePair param2 = new BasicNameValuePair("name1", null);
         assertEquals("name1", param2.toString());
     }
+    
+    public void testCloning() throws Exception {
+        BasicNameValuePair orig = new BasicNameValuePair("name1", "value1");
+        BasicNameValuePair clone = (BasicNameValuePair) orig.clone();
+        assertEquals(orig, clone);
+    }
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestRequestLine.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestRequestLine.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestRequestLine.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestRequestLine.java Sun Dec 16 06:11:11 2007
@@ -84,4 +84,13 @@
             fail("IllegalArgumentException should have been thrown");
         } catch (IllegalArgumentException e) { /* expected */ }
     }
+    
+    public void testCloning() throws Exception {
+        BasicRequestLine orig = new BasicRequestLine("GET", "/stuff", HttpVersion.HTTP_1_1);
+        BasicRequestLine clone = (BasicRequestLine) orig.clone();
+        assertEquals(orig.getMethod(), clone.getMethod());
+        assertEquals(orig.getUri(), clone.getUri());
+        assertEquals(orig.getProtocolVersion(), clone.getProtocolVersion());
+    }
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestStatusLine.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestStatusLine.java?rev=604625&r1=604624&r2=604625&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestStatusLine.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/message/TestStatusLine.java Sun Dec 16 06:11:11 2007
@@ -94,4 +94,13 @@
         // toString uses default formatting, hence the trailing space
         assertEquals("HTTP/1.1 200 ", statusline.toString());
     }
+    
+    public void testCloning() throws Exception {
+        BasicStatusLine orig = new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
+        BasicStatusLine clone = (BasicStatusLine) orig.clone();
+        assertEquals(orig.getReasonPhrase(), clone.getReasonPhrase());
+        assertEquals(orig.getStatusCode(), clone.getStatusCode());
+        assertEquals(orig.getProtocolVersion(), clone.getProtocolVersion());
+    }
+    
 }