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]
