[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