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

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

commit b426d6bb9b2eca5049fa70f318ed94800de44e05
Author: Benoit Tellier <[email protected]>
AuthorDate: Sat Mar 28 19:17:05 2020 +0700

    JAMES-3105 Staged builder for mailbox counters
---
 .../james/mailbox/model/MailboxCounters.java       | 52 ++++++++++++----------
 .../cassandra/mail/CassandraMailboxCounterDAO.java |  2 +-
 .../mail/CassandraMailboxCounterDAOTest.java       | 28 ++++++------
 .../james/mailbox/store/StoreMessageManager.java   |  2 +-
 4 files changed, 45 insertions(+), 39 deletions(-)

diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
index 6b5f0fe..d05eb65 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
@@ -19,44 +19,50 @@
 
 package org.apache.james.mailbox.model;
 
-import java.util.Optional;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
 
 public class MailboxCounters {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(MailboxCounters.class);
 
-    public static class Builder {
-        private Optional<Long> count = Optional.empty();
-        private Optional<Long> unseen = Optional.empty();
-        private Optional<MailboxId> mailboxId = Optional.empty();
-
-        public Builder mailboxId(MailboxId mailboxId) {
-            this.mailboxId = Optional.of(mailboxId);
-            return this;
+    public interface Builder {
+        @FunctionalInterface
+        interface RequireMailboxId {
+            RequireCount mailboxId(MailboxId mailboxId);
         }
 
-        public Builder count(long count) {
-            this.count = Optional.of(count);
-            return this;
+        @FunctionalInterface
+        interface RequireCount {
+            RequireUnseen count(long count);
         }
 
-        public Builder unseen(long unseen) {
-            this.unseen = Optional.of(unseen);
-            return this;
+        @FunctionalInterface
+        interface RequireUnseen {
+            FinalStage unseen(long unseen);
         }
 
-        public MailboxCounters build() {
-            Preconditions.checkState(count.isPresent(), "count is compulsory");
-            Preconditions.checkState(unseen.isPresent(), "unseen is 
compulsory");
-            Preconditions.checkState(mailboxId.isPresent(), "mailboxId is 
compulsory");
-            return new MailboxCounters(mailboxId.get(), count.get(), 
unseen.get());
+        class FinalStage {
+            private final long count;
+            private final long unseen;
+            private final MailboxId mailboxId;
+
+            FinalStage(long count, long unseen, MailboxId mailboxId) {
+                this.count = count;
+                this.unseen = unseen;
+                this.mailboxId = mailboxId;
+            }
+
+            public MailboxCounters build() {
+                return new MailboxCounters(mailboxId, count, unseen);
+            }
         }
     }
 
-    public static Builder builder() {
-        return new Builder();
+    public static Builder.RequireMailboxId builder() {
+        return mailboxId -> count -> unseen -> new Builder.FinalStage(count, 
unseen, mailboxId);
     }
 
     private final MailboxId mailboxId;
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
index c8898a4..e9fb398 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
@@ -122,9 +122,9 @@ public class CassandraMailboxCounterDAO {
 
     private MailboxCounters emptyCounters(CassandraId mailboxId) {
         return MailboxCounters.builder()
+            .mailboxId(mailboxId)
             .count(0)
             .unseen(0)
-            .mailboxId(mailboxId)
             .build();
     }
 
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
index 7bc43dc..558e58a 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
@@ -243,9 +243,9 @@ class CassandraMailboxCounterDAOTest {
     @Test
     void resetCountersShouldNoopWhenZeroAndNoData() {
         MailboxCounters counters = MailboxCounters.builder()
-            .unseen(0)
-            .count(0)
             .mailboxId(MAILBOX_ID)
+            .count(0)
+            .unseen(0)
             .build();
 
         testee.resetCounters(counters).block();
@@ -257,9 +257,9 @@ class CassandraMailboxCounterDAOTest {
     @Test
     void resetCountersShouldNoopWhenZeroAndZeroData() {
         MailboxCounters counters = MailboxCounters.builder()
-            .unseen(0)
-            .count(0)
             .mailboxId(MAILBOX_ID)
+            .count(0)
+            .unseen(0)
             .build();
 
         testee.incrementUnseen(MAILBOX_ID).block();
@@ -274,9 +274,9 @@ class CassandraMailboxCounterDAOTest {
     @Test
     void resetCountersShouldReInitCountWhenNothing() {
         MailboxCounters counters = MailboxCounters.builder()
-            .unseen(45)
-            .count(78)
             .mailboxId(MAILBOX_ID)
+            .count(78)
+            .unseen(45)
             .build();
 
         testee.resetCounters(counters).block();
@@ -288,9 +288,9 @@ class CassandraMailboxCounterDAOTest {
     @Test
     void resetCountersShouldReInitCountWhenData() {
         MailboxCounters counters = MailboxCounters.builder()
-            .unseen(45)
-            .count(78)
             .mailboxId(MAILBOX_ID)
+            .count(78)
+            .unseen(45)
             .build();
 
         testee.incrementCount(MAILBOX_ID).block();
@@ -305,9 +305,9 @@ class CassandraMailboxCounterDAOTest {
     @Test
     void resetCountersShouldBeIdempotent() {
         MailboxCounters counters = MailboxCounters.builder()
-            .unseen(45)
-            .count(78)
             .mailboxId(MAILBOX_ID)
+            .count(78)
+            .unseen(45)
             .build();
 
         testee.resetCounters(counters).block();
@@ -320,9 +320,9 @@ class CassandraMailboxCounterDAOTest {
     @Test
     void resetCountersShouldReInitCountWhenZeroUnseen() {
         MailboxCounters counters = MailboxCounters.builder()
-            .unseen(0)
-            .count(78)
             .mailboxId(MAILBOX_ID)
+            .count(78)
+            .unseen(0)
             .build();
 
         testee.incrementCount(MAILBOX_ID).block();
@@ -337,9 +337,9 @@ class CassandraMailboxCounterDAOTest {
     @Test
     void resetCountersShouldReInitCountWhenZeroCount() {
         MailboxCounters counters = MailboxCounters.builder()
-            .unseen(46)
-            .count(0)
             .mailboxId(MAILBOX_ID)
+            .count(0)
+            .unseen(46)
             .build();
 
         testee.incrementCount(MAILBOX_ID).block();
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index f9f7d71..bb139fc 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -220,8 +220,8 @@ public class StoreMessageManager implements MessageManager {
         }
         return MailboxCounters.builder()
             .mailboxId(mailbox.getMailboxId())
-            .unseen(0)
             .count(0)
+            .unseen(0)
             .build();
     }
 


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

Reply via email to