JAMES-2287 BlobId.Factory for creating BlobIds

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c4c370ee
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c4c370ee
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c4c370ee

Branch: refs/heads/master
Commit: c4c370ee946d7589f83acf0e944ca189a1363863
Parents: 4db46a8
Author: benwa <[email protected]>
Authored: Wed Jan 17 11:51:25 2018 +0700
Committer: benwa <[email protected]>
Committed: Fri Jan 19 09:07:28 2018 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/blob/api/BlobId.java   |  6 ++++++
 .../james/blob/api/ObjectStoreContract.java      |  7 ++++---
 .../james/blob/cassandra/CassandraBlobId.java    | 18 +++++++++++-------
 .../james/blob/cassandra/CassandraBlobsDAO.java  |  8 +++++---
 .../blob/cassandra/CassandraBlobIdTest.java      | 19 +++++++++++--------
 .../blob/cassandra/CassandraBlobsDAOTest.java    |  7 ++++---
 6 files changed, 41 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c4c370ee/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobId.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobId.java 
b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobId.java
index 647c153..dbfd204 100644
--- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobId.java
+++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobId.java
@@ -21,5 +21,11 @@ package org.apache.james.blob.api;
 
 public interface BlobId {
 
+    interface Factory {
+        BlobId forPayload(byte[] payload);
+
+        BlobId from(String id);
+    }
+
     String asString();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4c370ee/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
 
b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
index 2cbab37..bd4bd8e 100644
--- 
a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
+++ 
b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/ObjectStoreContract.java
@@ -31,7 +31,8 @@ import com.google.common.base.Strings;
 public interface ObjectStoreContract {
 
     ObjectStore testee();
-    BlobId from(String blodIdAsString);
+
+    BlobId.Factory blobIdFactory();
 
     @Test
     default void saveShouldReturnEmptyWhenNullData() throws Exception {
@@ -52,12 +53,12 @@ public interface ObjectStoreContract {
     default void saveShouldReturnBlobId() throws Exception {
         BlobId blobId = 
testee().save("toto".getBytes(StandardCharsets.UTF_8)).join();
 
-        
assertThat(blobId).isEqualTo(from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66"));
+        
assertThat(blobId).isEqualTo(blobIdFactory().from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66"));
     }
 
     @Test
     default void readShouldBeEmptyWhenNoExisting() throws IOException {
-        byte[] bytes = testee().read(from("unknown")).join();
+        byte[] bytes = testee().read(blobIdFactory().from("unknown")).join();
 
         assertThat(bytes).isEmpty();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4c370ee/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
 
b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
index 5dba57e..fedd734 100644
--- 
a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
+++ 
b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
@@ -30,14 +30,18 @@ import com.google.common.base.Strings;
 
 public class CassandraBlobId implements BlobId {
 
-    public static CassandraBlobId forPayload(byte[] payload) {
-        Preconditions.checkArgument(payload != null);
-        return new CassandraBlobId(DigestUtils.sha256Hex(payload));
-    }
+    public static class Factory implements BlobId.Factory {
+        @Override
+        public CassandraBlobId forPayload(byte[] payload) {
+            Preconditions.checkArgument(payload != null);
+            return new CassandraBlobId(DigestUtils.sha256Hex(payload));
+        }
 
-    public static CassandraBlobId from(String id) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(id));
-        return new CassandraBlobId(id);
+        @Override
+        public CassandraBlobId from(String id) {
+            Preconditions.checkArgument(!Strings.isNullOrEmpty(id));
+            return new CassandraBlobId(id);
+        }
     }
 
     private final String id;

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4c370ee/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
 
b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
index 97965ec..0c47757 100644
--- 
a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
+++ 
b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
@@ -62,11 +62,13 @@ public class CassandraBlobsDAO implements ObjectStore {
     private final PreparedStatement selectPart;
     private final DataChunker dataChunker;
     private final CassandraConfiguration configuration;
+    private final CassandraBlobId.Factory blobIdFactory;
 
     @Inject
-    public CassandraBlobsDAO(Session session, CassandraConfiguration 
cassandraConfiguration) {
+    public CassandraBlobsDAO(Session session, CassandraConfiguration 
cassandraConfiguration, CassandraBlobId.Factory blobIdFactory) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.configuration = cassandraConfiguration;
+        this.blobIdFactory = blobIdFactory;
         this.dataChunker = new DataChunker();
         this.insert = prepareInsert(session);
         this.select = prepareSelect(session);
@@ -77,7 +79,7 @@ public class CassandraBlobsDAO implements ObjectStore {
 
     @VisibleForTesting
     public CassandraBlobsDAO(Session session) {
-        this(session, CassandraConfiguration.DEFAULT_CONFIGURATION);
+        this(session, CassandraConfiguration.DEFAULT_CONFIGURATION, new 
CassandraBlobId.Factory());
     }
 
     private PreparedStatement prepareSelect(Session session) {
@@ -110,7 +112,7 @@ public class CassandraBlobsDAO implements ObjectStore {
     public CompletableFuture<BlobId> save(byte[] data) {
         Preconditions.checkNotNull(data);
 
-        CassandraBlobId blobId = CassandraBlobId.forPayload(data);
+        CassandraBlobId blobId = blobIdFactory.forPayload(data);
         return saveBlobParts(data, blobId)
             .thenCompose(numberOfChunk -> saveBlobPartsReferences(blobId, 
numberOfChunk))
             .thenApply(any -> blobId);

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4c370ee/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobIdTest.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobIdTest.java
 
b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobIdTest.java
index 2fe0db2..70c7e7c 100644
--- 
a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobIdTest.java
+++ 
b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobIdTest.java
@@ -24,6 +24,7 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.nio.charset.StandardCharsets;
 
+import org.apache.james.blob.api.BlobId;
 import org.apache.james.util.ClassLoaderUtils;
 import org.junit.jupiter.api.Test;
 
@@ -31,6 +32,8 @@ import nl.jqno.equalsverifier.EqualsVerifier;
 
 public class CassandraBlobIdTest {
 
+    private static final CassandraBlobId.Factory BLOB_ID_FACTORY = new 
CassandraBlobId.Factory();
+
     @Test
     public void shouldRespectBeanContract() {
         EqualsVerifier.forClass(CassandraBlobId.class).verify();
@@ -39,38 +42,38 @@ public class CassandraBlobIdTest {
     @Test
     public void fromShouldConstructBlobId() {
         String id = "111";
-        assertThat(CassandraBlobId.from(id))
+        assertThat(BLOB_ID_FACTORY.from(id))
             .isEqualTo(new CassandraBlobId(id));
     }
 
     @Test
     public void fromShouldThrowOnNull() {
-        assertThatThrownBy(() -> CassandraBlobId.from(null))
+        assertThatThrownBy(() -> BLOB_ID_FACTORY.from(null))
             .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void fromShouldThrowOnEmpty() {
-        assertThatThrownBy(() -> CassandraBlobId.from(""))
+        assertThatThrownBy(() -> BLOB_ID_FACTORY.from(""))
             .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void forPayloadShouldThrowOnNull() {
-        assertThatThrownBy(() -> CassandraBlobId.forPayload(null))
+        assertThatThrownBy(() -> BLOB_ID_FACTORY.forPayload(null))
             .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void forPayloadShouldHashEmptyArray() {
-        CassandraBlobId blobId = CassandraBlobId.forPayload(new byte[0]);
+        BlobId blobId = BLOB_ID_FACTORY.forPayload(new byte[0]);
 
         
assertThat(blobId.asString()).isEqualTo("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
     }
 
     @Test
     public void forPayloadShouldHashArray() {
-        CassandraBlobId blobId = 
CassandraBlobId.forPayload("content".getBytes(StandardCharsets.UTF_8));
+        BlobId blobId = 
BLOB_ID_FACTORY.forPayload("content".getBytes(StandardCharsets.UTF_8));
 
         
assertThat(blobId.asString()).isEqualTo("ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73");
     }
@@ -79,8 +82,8 @@ public class CassandraBlobIdTest {
     public void 
forPayloadShouldCalculateDifferentHashesWhenCraftedSha1Collision() throws 
Exception {
         byte[] payload1 = 
ClassLoaderUtils.getSystemResourceAsByteArray("shattered-1.pdf");
         byte[] payload2 = 
ClassLoaderUtils.getSystemResourceAsByteArray("shattered-2.pdf");
-        CassandraBlobId blobId1 = CassandraBlobId.forPayload(payload1);
-        CassandraBlobId blobId2 = CassandraBlobId.forPayload(payload2);
+        BlobId blobId1 = BLOB_ID_FACTORY.forPayload(payload1);
+        BlobId blobId2 = BLOB_ID_FACTORY.forPayload(payload2);
         assertThat(blobId1).isNotEqualTo(blobId2);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c4c370ee/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java
 
b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java
index 62e73cd..918730a 100644
--- 
a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java
+++ 
b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java
@@ -55,7 +55,8 @@ public class CassandraBlobsDAOTest implements 
ObjectStoreContract {
         testee = new CassandraBlobsDAO(cassandra.getConf(),
             CassandraConfiguration.builder()
                 .blobPartSize(CHUNK_SIZE)
-                .build());
+                .build(),
+            new CassandraBlobId.Factory());
     }
 
     @AfterEach
@@ -69,8 +70,8 @@ public class CassandraBlobsDAOTest implements 
ObjectStoreContract {
     }
 
     @Override
-    public BlobId from(String blodIdAsString) {
-        return CassandraBlobId.from(blodIdAsString);
+    public BlobId.Factory blobIdFactory() {
+        return new CassandraBlobId.Factory();
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to