This is an automated email from the ASF dual-hosted git repository.

aduprat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit ed91ea3e94f57cf14719a199dcd3f15f7ad38f01
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Fri Dec 7 14:47:30 2018 +0700

    Position data length when possible
---
 .../james/blob/objectstorage/AESPayloadCodec.java      |  5 +++++
 .../james/blob/objectstorage/DefaultPayloadCodec.java  |  9 +++++++++
 .../blob/objectstorage/ObjectStorageBlobsDAO.java      | 18 ++++++++++--------
 .../apache/james/blob/objectstorage/PayloadCodec.java  |  2 ++
 4 files changed, 26 insertions(+), 8 deletions(-)

diff --git 
a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java
 
b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java
index 2b0eaee..e19e51d 100644
--- 
a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java
+++ 
b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java
@@ -72,6 +72,11 @@ public class AESPayloadCodec implements PayloadCodec {
     }
 
     @Override
+    public Payload write(byte[] bytes) {
+        return write(new ByteArrayInputStream(bytes));
+    }
+
+    @Override
     public Payload write(InputStream inputStream) {
         try (FileBackedOutputStream outputStream = new 
FileBackedOutputStream(MAX_BYTES.intValue())) {
             outputStream.write(aead.encrypt(IOUtils.toByteArray(inputStream), 
EMPTY_ASSOCIATED_DATA));
diff --git 
a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java
 
b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java
index 6f56b26..9a6fcc3 100644
--- 
a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java
+++ 
b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.blob.objectstorage;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Optional;
@@ -32,6 +33,14 @@ public class DefaultPayloadCodec implements PayloadCodec {
     }
 
     @Override
+    public Payload write(byte[] bytes) {
+        if (bytes.length == 0) {
+            return write(new ByteArrayInputStream(bytes));
+        }
+        return new Payload(Payloads.newByteArrayPayload(bytes), 
Optional.of(new Long(bytes.length)));
+    }
+
+    @Override
     public InputStream read(Payload payload) throws IOException {
         return payload.getPayload().openStream();
     }
diff --git 
a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
 
b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
index fb22164..c38ea12 100644
--- 
a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
+++ 
b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.blob.objectstorage;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Optional;
@@ -93,15 +92,18 @@ public class ObjectStorageBlobsDAO implements BlobStore {
     }
 
     @Override
-    public Mono<BlobId> save(byte[] data) {
+    public Mono<BlobId> save(BucketName bucketName, byte[] data) {
+        Preconditions.checkNotNull(data);
         BlobId blobId = blobIdFactory.forPayload(data);
+        Payload payload = payloadCodec.write(data);
 
         Blob blob = blobStore.blobBuilder(blobId.asString())
-            .payload(payloadCodec.write(new ByteArrayInputStream(data)))
+            .payload(payload.getPayload())
+            .contentLength(payload.getLength().orElse(new Long(data.length)))
             .build();
 
         return save(bucketName, blob)
-            .thenApply(any -> blobId);
+            .thenReturn(blobId);
     }
 
     @Override
@@ -109,7 +111,7 @@ public class ObjectStorageBlobsDAO implements BlobStore {
         Preconditions.checkNotNull(data);
 
         BlobId tmpId = blobIdFactory.randomId();
-        return save(data, tmpId)
+        return save(bucketName, data, tmpId)
             .flatMap(id -> updateBlobId(tmpId, id));
     }
 
@@ -121,18 +123,18 @@ public class ObjectStorageBlobsDAO implements BlobStore {
             .thenReturn(to);
     }
 
-    private Mono<BlobId> save(InputStream data, BlobId id) {
+    private Mono<BlobId> save(BucketName bucketName, InputStream data, BlobId 
id) {
         HashingInputStream hashingInputStream = new 
HashingInputStream(Hashing.sha256(), data);
         Payload payload = payloadCodec.write(hashingInputStream);
         Blob blob = blobStore.blobBuilder(id.asString())
                             .payload(payload.getPayload())
                             .build();
 
-        return save(blob)
+        return save(bucketName, blob)
             .then(Mono.fromCallable(() -> 
blobIdFactory.from(hashingInputStream.hash().toString())));
     }
 
-    private Mono<String> save(Blob blob) {
+    private Mono<String> save(BucketName bucketName, Blob blob) {
         String containerName = this.containerName.value();
         return Mono.fromCallable(() -> blobStore.putBlob(containerName, blob));
     }
diff --git 
a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java
 
b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java
index debb9fb..4bbbd0e 100644
--- 
a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java
+++ 
b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java
@@ -25,6 +25,8 @@ import java.io.InputStream;
 public interface PayloadCodec {
     Payload write(InputStream is);
 
+    Payload write(byte[] bytes);
+
     InputStream read(Payload payload) throws IOException;
 
     PayloadCodec DEFAULT_CODEC = new DefaultPayloadCodec();


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to