You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2013/12/16 22:15:27 UTC
[2/3] git commit: JCLOUDS-410. Add support for ByteSource Payloads
JCLOUDS-410. Add support for ByteSource Payloads
Also deprecate byte[], File, InputSupplier<InputStream>, and String
Payloads. Callers should instead provide a ByteSource via
ByteSource.wrap(byte[]) and Files.asByteSource(File)
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/e48d4985
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/e48d4985
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/e48d4985
Branch: refs/heads/master
Commit: e48d4985ea01d7dc92b75a6fc8b4ce2d795e663c
Parents: f3dcd3f
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Dec 13 16:52:15 2013 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Dec 16 13:06:30 2013 -0800
----------------------------------------------------------------------
.../jclouds/blobstore/domain/BlobBuilder.java | 12 +++++
.../domain/internal/BlobBuilderImpl.java | 11 ++++
.../main/java/org/jclouds/http/HttpMessage.java | 16 ++++++
.../main/java/org/jclouds/http/HttpUtils.java | 3 +-
core/src/main/java/org/jclouds/io/Payloads.java | 24 +++++++++
.../jclouds/io/payloads/ByteArrayPayload.java | 2 +
.../jclouds/io/payloads/ByteSourcePayload.java | 56 ++++++++++++++++++++
.../org/jclouds/io/payloads/FilePayload.java | 2 +
.../io/payloads/InputStreamSupplierPayload.java | 16 +++---
.../org/jclouds/io/payloads/StringPayload.java | 2 +
10 files changed, 133 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java b/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java
index ed42cd8..ad27986 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java
@@ -25,6 +25,7 @@ import java.util.Map;
import org.jclouds.blobstore.domain.internal.BlobBuilderImpl;
import org.jclouds.io.Payload;
+import com.google.common.io.ByteSource;
import com.google.inject.ImplementedBy;
/**
@@ -77,21 +78,32 @@ public interface BlobBuilder {
*
* @param payload
* payload you wish to construct the {@link Blob} with.
+ * @deprecated see payload(ByteSource.wrap(byte[])
*/
+ @Deprecated
PayloadBlobBuilder payload(byte[] payload);
/**
+ * @param payload payload you wish to construct the {@link Blob} with.
+ */
+ PayloadBlobBuilder payload(ByteSource byteSource);
+
+ /**
*
* @param payload
* payload you wish to construct the {@link Blob} with.
+ * @deprecated see payload(ByteSource.wrap(String.getBytes()))
*/
+ @Deprecated
PayloadBlobBuilder payload(String payload);
/**
*
* @param payload
* payload you wish to construct the {@link Blob} with.
+ * @deprecated see payload(Files.asByteSource(File))
*/
+ @Deprecated
PayloadBlobBuilder payload(File payload);
/**
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java b/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java
index 2069220..62a81e1 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java
@@ -35,6 +35,7 @@ import org.jclouds.io.Payloads;
import org.jclouds.io.payloads.PhantomPayload;
import com.google.common.collect.Maps;
+import com.google.common.io.ByteSource;
/**
* @author Adrian Cole
@@ -89,6 +90,11 @@ public class BlobBuilderImpl implements BlobBuilder {
return payload(newPayload(checkNotNull(data, "data")));
}
+ @Override
+ public PayloadBlobBuilder payload(ByteSource data) {
+ return payload(newPayload(checkNotNull(data, "data")));
+ }
+
/**
* {@inheritDoc}
*/
@@ -162,6 +168,11 @@ public class BlobBuilderImpl implements BlobBuilder {
}
@Override
+ public PayloadBlobBuilder payload(ByteSource payload) {
+ return builder.payload(payload);
+ }
+
+ @Override
public PayloadBlobBuilder payload(String payload) {
return builder.payload(payload);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/core/src/main/java/org/jclouds/http/HttpMessage.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/HttpMessage.java b/core/src/main/java/org/jclouds/http/HttpMessage.java
index 014a252..4e3102d 100644
--- a/core/src/main/java/org/jclouds/http/HttpMessage.java
+++ b/core/src/main/java/org/jclouds/http/HttpMessage.java
@@ -33,6 +33,7 @@ import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
+import com.google.common.io.ByteSource;
/**
* Represents a request that can be executed within {@link HttpCommandExecutorService}
@@ -65,15 +66,28 @@ public class HttpMessage extends PayloadEnclosingImpl {
/**
* @see HttpMessage#getPayload()
+ * @deprecated see payload(ByteSource.wrap(byte[]))
*/
+ @Deprecated
public T payload(byte [] payload) {
this.payload = Payloads.newByteArrayPayload(checkNotNull(payload, "payload"));
return self();
}
+
+ /**
+ * @see HttpMessage#getPayload()
+ */
+ @Deprecated
+ public T payload(ByteSource payload) {
+ this.payload = Payloads.newByteSourcePayload(checkNotNull(payload, "payload"));
+ return self();
+ }
/**
* @see HttpMessage#getPayload()
+ * @deprecated see payload(Files.asByteSource(File))
*/
+ @Deprecated
public T payload(File payload) {
this.payload = Payloads.newFilePayload(checkNotNull(payload, "payload"));
return self();
@@ -89,7 +103,9 @@ public class HttpMessage extends PayloadEnclosingImpl {
/**
* @see HttpMessage#getPayload()
+ * @deprecated see payload(ByteSource.wrap(String.getBytes()))
*/
+ @Deprecated
public T payload(String payload) {
this.payload = Payloads.newStringPayload(checkNotNull(payload, "payload"));
return self();
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/core/src/main/java/org/jclouds/http/HttpUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/HttpUtils.java b/core/src/main/java/org/jclouds/http/HttpUtils.java
index 592205a..6e41625 100644
--- a/core/src/main/java/org/jclouds/http/HttpUtils.java
+++ b/core/src/main/java/org/jclouds/http/HttpUtils.java
@@ -64,6 +64,7 @@ import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import com.google.common.collect.ImmutableSet.Builder;
+import com.google.common.io.ByteSource;
import com.google.common.reflect.Invokable;
import com.google.inject.Inject;
@@ -161,7 +162,7 @@ public class HttpUtils {
public static byte[] closeClientButKeepContentStream(PayloadEnclosing response) {
byte[] returnVal = toByteArrayOrNull(response);
if (returnVal != null && !response.getPayload().isRepeatable()) {
- Payload newPayload = Payloads.newByteArrayPayload(returnVal);
+ Payload newPayload = Payloads.newByteSourcePayload(ByteSource.wrap(returnVal));
MutableContentMetadata fromMd = response.getPayload().getContentMetadata();
MutableContentMetadata toMd = newPayload.getContentMetadata();
copy(fromMd, toMd);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/core/src/main/java/org/jclouds/io/Payloads.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/Payloads.java b/core/src/main/java/org/jclouds/io/Payloads.java
index 620a514..f322d76 100644
--- a/core/src/main/java/org/jclouds/io/Payloads.java
+++ b/core/src/main/java/org/jclouds/io/Payloads.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.io.InputStream;
import org.jclouds.io.payloads.ByteArrayPayload;
+import org.jclouds.io.payloads.ByteSourcePayload;
import org.jclouds.io.payloads.FilePayload;
import org.jclouds.io.payloads.InputStreamPayload;
import org.jclouds.io.payloads.StringPayload;
@@ -31,6 +32,7 @@ import org.jclouds.io.payloads.UrlEncodedFormPayload;
import com.google.common.collect.Multimap;
import com.google.common.io.ByteStreams;
+import com.google.common.io.ByteSource;
/**
*
@@ -40,6 +42,10 @@ public class Payloads {
private Payloads() {
}
+ /**
+ * @deprecated see newPayload(ByteSource) or newPayload(InputStream)
+ */
+ @Deprecated
public static Payload newPayload(Object data) {
checkNotNull(data, "data");
if (data instanceof Payload) {
@@ -48,6 +54,8 @@ public class Payloads {
return newInputStreamPayload((InputStream) data);
} else if (data instanceof byte[]) {
return newByteArrayPayload((byte[]) data);
+ } else if (data instanceof ByteSource) {
+ return newByteSourcePayload((ByteSource) data);
} else if (data instanceof String) {
return newStringPayload((String) data);
} else if (data instanceof File) {
@@ -61,14 +69,30 @@ public class Payloads {
return new InputStreamPayload(checkNotNull(data, "data"));
}
+ /**
+ * @deprecated see newPayload(ByteSource)
+ */
+ @Deprecated
public static ByteArrayPayload newByteArrayPayload(byte[] data) {
return new ByteArrayPayload(checkNotNull(data, "data"));
}
+ public static ByteSourcePayload newByteSourcePayload(ByteSource data) {
+ return new ByteSourcePayload(checkNotNull(data, "data"));
+ }
+
+ /**
+ * @deprecated see newPayload(ByteSource)
+ */
+ @Deprecated
public static StringPayload newStringPayload(String data) {
return new StringPayload(checkNotNull(data, "data"));
}
+ /**
+ * @deprecated see newPayload(ByteSource)
+ */
+ @Deprecated
public static FilePayload newFilePayload(File data) {
return new FilePayload(checkNotNull(data, "data"));
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java b/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java
index 68aeaf7..3b8a23e 100644
--- a/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java
+++ b/core/src/main/java/org/jclouds/io/payloads/ByteArrayPayload.java
@@ -24,7 +24,9 @@ import java.io.InputStream;
/**
* @author Adrian Cole
+ * @deprecated see ByteSourcePayload
*/
+@Deprecated
public class ByteArrayPayload extends BasePayload<byte[]> {
public ByteArrayPayload(byte[] content) {
this(content, null);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/core/src/main/java/org/jclouds/io/payloads/ByteSourcePayload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/payloads/ByteSourcePayload.java b/core/src/main/java/org/jclouds/io/payloads/ByteSourcePayload.java
new file mode 100644
index 0000000..e6a111d
--- /dev/null
+++ b/core/src/main/java/org/jclouds/io/payloads/ByteSourcePayload.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.io.payloads;
+
+import static com.google.common.io.Closeables.closeQuietly;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.google.common.io.ByteSource;
+import com.google.common.io.Closer;
+
+/**
+ * A repeatable, ByteSource-backed Payload.
+ *
+ * @author Andrew Gaul
+ */
+public class ByteSourcePayload extends BasePayload<ByteSource> {
+ private final Closer closer = Closer.create();
+
+ public ByteSourcePayload(ByteSource content) {
+ super(content);
+ }
+
+ @Override
+ public InputStream openStream() throws IOException {
+ return closer.register(content.openStream());
+ }
+
+ @Override
+ public boolean isRepeatable() {
+ return true;
+ }
+
+ /**
+ * if we created the stream, then it is already consumed on close.
+ */
+ @Override
+ public void release() {
+ closeQuietly(closer);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/core/src/main/java/org/jclouds/io/payloads/FilePayload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/payloads/FilePayload.java b/core/src/main/java/org/jclouds/io/payloads/FilePayload.java
index 430f5d8..a0b0133 100644
--- a/core/src/main/java/org/jclouds/io/payloads/FilePayload.java
+++ b/core/src/main/java/org/jclouds/io/payloads/FilePayload.java
@@ -26,7 +26,9 @@ import java.io.IOException;
/**
* @author Adrian Cole
+ * @deprecated see ByteSourcePayload
*/
+@Deprecated
public class FilePayload extends BasePayload<File> {
public FilePayload(File content) {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/core/src/main/java/org/jclouds/io/payloads/InputStreamSupplierPayload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/payloads/InputStreamSupplierPayload.java b/core/src/main/java/org/jclouds/io/payloads/InputStreamSupplierPayload.java
index 54f0123..b962840 100644
--- a/core/src/main/java/org/jclouds/io/payloads/InputStreamSupplierPayload.java
+++ b/core/src/main/java/org/jclouds/io/payloads/InputStreamSupplierPayload.java
@@ -20,16 +20,17 @@ import static com.google.common.io.Closeables.closeQuietly;
import java.io.IOException;
import java.io.InputStream;
-import java.util.List;
-import com.google.common.collect.Lists;
+import com.google.common.io.Closer;
import com.google.common.io.InputSupplier;
/**
* @author Adrian Cole
+ * @deprecated see ByteSourcePayload
*/
+@Deprecated
public class InputStreamSupplierPayload extends BasePayload<InputSupplier<? extends InputStream>> {
- private List<InputStream> toClose = Lists.newArrayList();
+ private final Closer closer = Closer.create();
public InputStreamSupplierPayload(InputSupplier<? extends InputStream> content) {
super(content);
@@ -40,9 +41,7 @@ public class InputStreamSupplierPayload extends BasePayload<InputSupplier<? exte
*/
@Override
public InputStream openStream() throws IOException {
- InputStream returnVal = content.getInput();
- toClose.add(returnVal);
- return returnVal;
+ return closer.register(content.getInput());
}
/**
@@ -58,9 +57,6 @@ public class InputStreamSupplierPayload extends BasePayload<InputSupplier<? exte
*/
@Override
public void release() {
- if (toClose.size() > 0)
- for (InputStream content = toClose.remove(0); toClose.size() > 0; content = toClose.remove(0))
- closeQuietly(content);
+ closeQuietly(closer);
}
-
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/e48d4985/core/src/main/java/org/jclouds/io/payloads/StringPayload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/payloads/StringPayload.java b/core/src/main/java/org/jclouds/io/payloads/StringPayload.java
index 2452a94..70ea1be 100644
--- a/core/src/main/java/org/jclouds/io/payloads/StringPayload.java
+++ b/core/src/main/java/org/jclouds/io/payloads/StringPayload.java
@@ -26,7 +26,9 @@ import com.google.common.base.Charsets;
* a different encoding, please use {@link ByteArrayPayload}.
*
* @author Adrian Cole
+ * @deprecated see ByteSourcePayload
*/
+@Deprecated
public class StringPayload extends BasePayload<String> {
private final byte[] bytes;