[jbosscache-commits] JBoss Cache SVN: r5319 - in amazon-s3/trunk: src/main/java/com/amazon/s3 and 1 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Feb 6 21:13:58 EST 2008


Author: genman
Date: 2008-02-06 21:13:58 -0500 (Wed, 06 Feb 2008)
New Revision: 5319

Modified:
   amazon-s3/trunk/
   amazon-s3/trunk/src/main/java/com/amazon/s3/Connection.java
   amazon-s3/trunk/src/main/java/com/amazon/s3/GetResponse.java
   amazon-s3/trunk/src/main/java/com/amazon/s3/Headers.java
   amazon-s3/trunk/src/main/java/com/amazon/s3/ListAllBucketsResponse.java
   amazon-s3/trunk/src/main/java/com/amazon/s3/ListResponse.java
   amazon-s3/trunk/src/main/java/com/amazon/s3/LocationResponse.java
   amazon-s3/trunk/src/main/java/com/amazon/s3/Response.java
   amazon-s3/trunk/src/main/java/com/amazon/s3/S3Object.java
   amazon-s3/trunk/src/test/java/com/amazon/s3/S3Test.java
Log:
Clean up implementation some more
... since HttpURLConnection is slow, may switch to Apache HTTP client someday


Property changes on: amazon-s3/trunk
___________________________________________________________________
Name: svn:ignore
   + target


Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/Connection.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/Connection.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/Connection.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -132,16 +132,24 @@
 
 	/**
      * Creates a new bucket.
-     * @throws IOException 
      */
     public Response create(Bucket bucket, String location) throws IOException {
     	return create(bucket, location, null);
     }
     
+	/**
+     * Creates a new bucket.
+	 * @throws IOException 
+     */
+	public Response create(Bucket bucket) throws IOException {
+    	return create(bucket, null);
+	}
+
     /**
      * Check if the specified bucket exists (via a HEAD request)
      * @param bucket The name of the bucket to check
      * @return true if HEAD access returned success
+     * @see #head(Bucket, String)
      */
     public boolean exists(Bucket bucket) throws IOException
     {
@@ -194,6 +202,13 @@
     
     /**
      * Lists the contents of a bucket.
+     */
+	public ListResponse list(Bucket bucket, String prefix) throws IOException {
+		return list(bucket, prefix, null, null);
+	}
+    
+    /**
+     * Lists the contents of a bucket.
      * @param bucket The name of the bucket to list.
      * @param prefix All returned keys will start with this string (can be null).
      * @param marker All returned keys will be lexographically greater than
@@ -281,6 +296,21 @@
     {
     	return get(bucket, key, null);
     }
+    
+    /**
+     * Returns information about an S3 object without loading it.
+     * Check {@link Response#isOk()} or {@link Response#isNotFound()} to see if the object exists.
+     */
+    public Response head(Bucket bucket, String key) throws IOException {
+    	return head(bucket, key, null);
+    }
+    
+    /**
+     * Returns information about an S3 object without loading it.
+     */
+    public Response head(Bucket bucket, String key, Headers headers) throws IOException {
+        return new Response(makeRequest(Method.HEAD, bucket, key, null, headers));
+    }
 
     /**
      * Deletes an object from S3.
@@ -581,5 +611,5 @@
     		" isSecure=" + isSecure + " server=" + server +
     		" port=" + port + " format=" + callingFormat;
     }
-    
+
 }

Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/GetResponse.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/GetResponse.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/GetResponse.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -26,13 +26,12 @@
 	 * Pulls a representation of an S3Object out of the HttpURLConnection
 	 * response.
 	 */
-	public GetResponse(HttpURLConnection connection) throws IOException {
+	GetResponse(HttpURLConnection connection) throws IOException {
 		super(connection);
 		if (connection.getResponseCode() < 400) {
-			Headers metadata = Headers.extractMetadata(connection);
 			int len = connection.getContentLength();
 			byte[] body = slurpInputStream(connection.getInputStream(), len);
-			object = new S3Object(body, metadata);
+			object = new S3Object(body, getHeaders().extractMetadata());
 		}
 	}
 

Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/Headers.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/Headers.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/Headers.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -1,6 +1,5 @@
 package com.amazon.s3;
 
-import java.net.HttpURLConnection;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -81,12 +80,10 @@
 	}
 
 	/**
-	 * Examines the response's header fields and returns a Map from String to
-	 * List of Strings representing the object's metadata.
-	 */
-	public static Headers extractMetadata(HttpURLConnection connection) {
+	 * Returns a new Headers object with metadata from this object.
+	 */
+	public Headers extractMetadata() {
 		TreeMap<String, List<String>> metadata = new TreeMap<String, List<String>>();
-		Map<String, List<String>> headers = connection.getHeaderFields();
 		for (Map.Entry<String, List<String>> me : headers.entrySet()) {
 			String key = me.getKey();
 			if (key == null)
@@ -97,7 +94,7 @@
 		}
 
 		return new Headers(metadata);
-    }
+	}
 	
 	/**
 	 * Returns new headers with metadata.
@@ -117,5 +114,13 @@
         }
         return new Headers(merged);
     }
+    
+    /**
+     * Returns a debug string.
+     */
+    @Override
+    public String toString() {
+       return "headers=" + headers;
+    }
 
 }

Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/ListAllBucketsResponse.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/ListAllBucketsResponse.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/ListAllBucketsResponse.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -28,9 +28,9 @@
 	
 	private List<Bucket> entries;
 
-	public ListAllBucketsResponse(HttpURLConnection connection) throws IOException {
+	ListAllBucketsResponse(HttpURLConnection connection) throws IOException {
 		super(connection);
-		if (success()) {
+		if (isOk()) {
     		entries = new ArrayList<Bucket>();
 			parse(new ListAllMyBucketsHandler());
 		}

Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/ListResponse.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/ListResponse.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/ListResponse.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -43,9 +43,9 @@
 
     private List<CommonPrefixEntry> commonPrefixEntries = null;
 
-    public ListResponse(HttpURLConnection connection) throws IOException {
+    ListResponse(HttpURLConnection connection) throws IOException {
         super(connection);
-        if (success()) {
+        if (isOk()) {
         	parse(new ListBucketHandler());
         }
     }

Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/LocationResponse.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/LocationResponse.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/LocationResponse.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -27,9 +27,9 @@
     /**
      * Parse the response to a ?location query.
      */
-    public LocationResponse(HttpURLConnection connection) throws IOException {
+    LocationResponse(HttpURLConnection connection) throws IOException {
         super(connection);
-        if (success()) {
+        if (isOk()) {
         	parse(new LocationResponseHandler());
         }
     }

Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/Response.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/Response.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/Response.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -30,7 +30,7 @@
 
 	private HttpURLConnection connection;
 
-	public Response(HttpURLConnection connection) throws IOException {
+	Response(HttpURLConnection connection) throws IOException {
 		this.connection = connection;
 	}
 
@@ -49,6 +49,22 @@
 	}
 
 	/**
+	 * Returns content length of the response.
+	 */
+	public int getContentLength() {
+		return connection.getContentLength();
+	}
+
+	/**
+	 * Throws an IllegalStateException if not 200 OK.
+	 */
+	public void assertOk() {
+        if (isOk())
+            return;
+        throw new IllegalStateException("Unexpected response: " + this);
+	}
+	
+	/**
 	 * Returns an HTTP header field from the response.
 	 */
 	public String getHeaderField(String field) {
@@ -56,17 +72,37 @@
 	}
 
 	/**
-	 * Returns true if processing was success.
+	 * Returns all HTTP headers.
+	 * Prefer caching the return value.
 	 */
-	public boolean success() {
+	public Headers getHeaders() {
+		return new Headers(connection.getHeaderFields());
+	}
+
+	/**
+	 * Returns true if processing was 200-level OK.
+	 */
+	public boolean isOk() {
 		try {
-			return connection.getResponseCode() < 400;
+			int code = connection.getResponseCode();
+			return code == 200 || code == 204;
 		} catch (IOException e) {
 			return false;
 		}
 	}
 
 	/**
+	 * Returns true if processing returned 404.
+	 */
+	public boolean isNotFound() {
+		try {
+			return connection.getResponseCode() == 404;
+		} catch (IOException e) {
+			return false;
+		}
+	}
+
+	/**
 	 * Returns a string representation.
 	 */
 	@Override

Modified: amazon-s3/trunk/src/main/java/com/amazon/s3/S3Object.java
===================================================================
--- amazon-s3/trunk/src/main/java/com/amazon/s3/S3Object.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/main/java/com/amazon/s3/S3Object.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -34,6 +34,13 @@
         this.metadata = metadata;
     }
     
+    /**
+     * Constructs a new S3Object.
+     */
+	public S3Object(byte[] data) {
+		this(data, null);
+	}
+
 	/**
 	 * Returns data.
 	 */
@@ -54,9 +61,9 @@
 	@Override
 	public String toString()
 	{
-	    return "S3Object[ " +
-	        "data=" + this.data.length + 
-	        "metadata=" + this.metadata + "]";
+	    return "S3Object[" +
+	        " data.length=" + this.data.length + 
+	        " metadata=" + this.metadata + "]";
 	}
 	
 }

Modified: amazon-s3/trunk/src/test/java/com/amazon/s3/S3Test.java
===================================================================
--- amazon-s3/trunk/src/test/java/com/amazon/s3/S3Test.java	2008-02-07 01:24:19 UTC (rev 5318)
+++ amazon-s3/trunk/src/test/java/com/amazon/s3/S3Test.java	2008-02-07 02:13:58 UTC (rev 5319)
@@ -84,19 +84,19 @@
         final String innerKey = "test/inner.txt";
         final String lastKey = "z-last-key.txt";
 
-        response = conn.put(bucket, key, new S3Object(text.getBytes(), null), null);
+        response = conn.put(bucket, key, new S3Object(text.getBytes()));
         assertEquals(
                 "couldn't put simple object",
                 HttpURLConnection.HTTP_OK,
                 response.getResponseCode());
 
-        response = conn.put(bucket, innerKey, new S3Object(text.getBytes(), null), null);
+        response = conn.put(bucket, innerKey, new S3Object(text.getBytes()), null);
         assertEquals(
                 "couldn't put simple object",
                 HttpURLConnection.HTTP_OK,
                 response.getResponseCode());
 
-        response = conn.put(bucket, lastKey, new S3Object(text.getBytes(), null), null);
+        response = conn.put(bucket, lastKey, new S3Object(text.getBytes()), null);
         assertEquals(
                 "couldn't put simple object",
                 HttpURLConnection.HTTP_OK,
@@ -230,7 +230,7 @@
                 getResponse.getObject().getMetadata().getValue("title"));
 
         String weirdKey = "&=//%# ++++";
-        response = conn.put(bucket, weirdKey, new S3Object(text.getBytes(), null), null);
+        response = conn.put(bucket, weirdKey, new S3Object(text.getBytes()));
         assertEquals(
                 "couldn't put weird key",
                 HttpURLConnection.HTTP_OK,




More information about the jbosscache-commits mailing list