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 11ed2708cbe6faacae4dfb67baa1ca77a6d96f93 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Thu Nov 14 14:58:21 2019 +0700 JAMES-2949 Username strong typing for subscriptions --- .../cassandra/user/CassandraSubscriptionMapper.java | 15 ++++++++------- .../apache/james/mailbox/jpa/JPASubscriptionManager.java | 2 +- .../james/mailbox/jpa/user/JPASubscriptionMapper.java | 13 +++++++++---- .../james/mailbox/jpa/user/model/JPASubscription.java | 9 +++++---- .../mailbox/maildir/user/MaildirSubscriptionMapper.java | 14 +++++++------- .../mailbox/inmemory/user/InMemorySubscriptionMapper.java | 7 ++++--- .../james/mailbox/store/StoreSubscriptionManager.java | 8 ++++---- .../james/mailbox/store/user/SubscriptionMapper.java | 6 +++--- .../james/mailbox/store/user/model/Subscription.java | 4 +++- .../mailbox/store/user/model/impl/SimpleSubscription.java | 7 ++++--- .../james/mailbox/store/user/SubscriptionMapperTest.java | 5 +++-- 11 files changed, 51 insertions(+), 39 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java index a1ce340..bc9e7ff 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.stream.Collectors; import org.apache.james.backends.cassandra.utils.CassandraUtils; +import org.apache.james.core.Username; import org.apache.james.mailbox.store.transaction.NonTransactionalMapper; import org.apache.james.mailbox.store.user.SubscriptionMapper; import org.apache.james.mailbox.store.user.model.Subscription; @@ -53,25 +54,25 @@ public class CassandraSubscriptionMapper extends NonTransactionalMapper implemen public synchronized void delete(Subscription subscription) { session.execute(QueryBuilder.delete() .from(TABLE_NAME) - .where(eq(USER, subscription.getUser())) + .where(eq(USER, subscription.getUser().asString())) .and(eq(MAILBOX, subscription.getMailbox()))); } @Override - public Subscription findMailboxSubscriptionForUser(String user, String mailbox) { + public Subscription findMailboxSubscriptionForUser(Username user, String mailbox) { ResultSet results = session.execute(select(MAILBOX) .from(TABLE_NAME) - .where(eq(USER, user)) + .where(eq(USER, user.asString())) .and(eq(MAILBOX, mailbox))); return !results.isExhausted() ? new SimpleSubscription(user, mailbox) : null; } @Override - public List<Subscription> findSubscriptionsForUser(String user) { + public List<Subscription> findSubscriptionsForUser(Username user) { return cassandraUtils.convertToStream( session.execute(select(MAILBOX) .from(TABLE_NAME) - .where(eq(USER, user)))) + .where(eq(USER, user.asString())))) .map((row) -> new SimpleSubscription(user, row.getString(MAILBOX))) .collect(Collectors.toList()); } @@ -79,7 +80,7 @@ public class CassandraSubscriptionMapper extends NonTransactionalMapper implemen @Override public synchronized void save(Subscription subscription) { session.execute(insertInto(TABLE_NAME) - .value(USER, subscription.getUser()) + .value(USER, subscription.getUser().asString()) .value(MAILBOX, subscription.getMailbox())); } @@ -87,7 +88,7 @@ public class CassandraSubscriptionMapper extends NonTransactionalMapper implemen return cassandraUtils.convertToStream( session.execute(select(FIELDS) .from(TABLE_NAME))) - .map((row) -> new SimpleSubscription(row.getString(USER), row.getString(MAILBOX))) + .map((row) -> new SimpleSubscription(Username.of(row.getString(USER)), row.getString(MAILBOX))) .collect(Collectors.toList()); } diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java index fae41ba..7fb342e 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java @@ -38,6 +38,6 @@ public class JPASubscriptionManager extends StoreSubscriptionManager { @Override protected Subscription createSubscription(MailboxSession session, String mailbox) { - return new JPASubscription(session.getUser().asString(), mailbox); + return new JPASubscription(session.getUser(), mailbox); } } diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java index 7d41117..a096632 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java @@ -24,6 +24,7 @@ import javax.persistence.EntityManagerFactory; import javax.persistence.NoResultException; import javax.persistence.PersistenceException; +import org.apache.james.core.Username; import org.apache.james.mailbox.exception.SubscriptionException; import org.apache.james.mailbox.jpa.JPATransactionalMapper; import org.apache.james.mailbox.store.user.SubscriptionMapper; @@ -40,10 +41,12 @@ public class JPASubscriptionMapper extends JPATransactionalMapper implements Sub @Override - public Subscription findMailboxSubscriptionForUser(String user, String mailbox) throws SubscriptionException { + public Subscription findMailboxSubscriptionForUser(Username user, String mailbox) throws SubscriptionException { try { return (Subscription) getEntityManager().createNamedQuery("findFindMailboxSubscriptionForUser") - .setParameter("userParam", user).setParameter("mailboxParam", mailbox).getSingleResult(); + .setParameter("userParam", user.asString()) + .setParameter("mailboxParam", mailbox) + .getSingleResult(); } catch (NoResultException e) { return null; } catch (PersistenceException e) { @@ -62,9 +65,11 @@ public class JPASubscriptionMapper extends JPATransactionalMapper implements Sub @Override @SuppressWarnings("unchecked") - public List<Subscription> findSubscriptionsForUser(String user) throws SubscriptionException { + public List<Subscription> findSubscriptionsForUser(Username user) throws SubscriptionException { try { - return (List<Subscription>) getEntityManager().createNamedQuery("findSubscriptionsForUser").setParameter("userParam", user).getResultList(); + return (List<Subscription>) getEntityManager().createNamedQuery("findSubscriptionsForUser") + .setParameter("userParam", user.asString()) + .getResultList(); } catch (PersistenceException e) { throw new SubscriptionException(e); } diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java index 5cb4a52..785ce13 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java @@ -28,6 +28,7 @@ import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.UniqueConstraint; +import org.apache.james.core.Username; import org.apache.james.mailbox.store.user.model.Subscription; /** @@ -81,9 +82,9 @@ public class JPASubscription implements Subscription { * @param username not null * @param mailbox not null */ - public JPASubscription(String username, String mailbox) { + public JPASubscription(Username username, String mailbox) { super(); - this.username = username; + this.username = username.asString(); this.mailbox = mailbox; } @@ -93,8 +94,8 @@ public class JPASubscription implements Subscription { } @Override - public String getUser() { - return username; + public Username getUser() { + return Username.of(username); } @Override diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java index 55fceb3..dee6ac7 100644 --- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java +++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java @@ -58,7 +58,7 @@ public class MaildirSubscriptionMapper extends NonTransactionalMapper implements boolean changed = subscriptionNames.size() != newSubscriptions.size(); if (changed) { try { - writeSubscriptions(new File(store.userRoot(Username.of(subscription.getUser()))), newSubscriptions); + writeSubscriptions(new File(store.userRoot(subscription.getUser())), newSubscriptions); } catch (IOException e) { throw new SubscriptionException(e); } @@ -66,7 +66,7 @@ public class MaildirSubscriptionMapper extends NonTransactionalMapper implements } @Override - public List<Subscription> findSubscriptionsForUser(String user) throws SubscriptionException { + public List<Subscription> findSubscriptionsForUser(Username user) throws SubscriptionException { Set<String> subscriptionNames = readSubscriptionsForUser(user); return subscriptionNames.stream() .map(subscription -> new SimpleSubscription(user, subscription)) @@ -74,8 +74,8 @@ public class MaildirSubscriptionMapper extends NonTransactionalMapper implements } @Override - public Subscription findMailboxSubscriptionForUser(String user, String mailbox) throws SubscriptionException { - File userRoot = new File(store.userRoot(Username.of(user))); + public Subscription findMailboxSubscriptionForUser(Username user, String mailbox) throws SubscriptionException { + File userRoot = new File(store.userRoot(user)); Set<String> subscriptionNames; try { subscriptionNames = readSubscriptions(userRoot); @@ -99,7 +99,7 @@ public class MaildirSubscriptionMapper extends NonTransactionalMapper implements boolean changed = subscriptionNames.size() != newSubscriptions.size(); if (changed) { try { - writeSubscriptions(new File(store.userRoot(Username.of(subscription.getUser()))), newSubscriptions); + writeSubscriptions(new File(store.userRoot(subscription.getUser())), newSubscriptions); } catch (IOException e) { throw new SubscriptionException(e); } @@ -117,8 +117,8 @@ public class MaildirSubscriptionMapper extends NonTransactionalMapper implements * @param user The user to get the subscriptions for * @return A Set of names of subscribed mailboxes of the user */ - private Set<String> readSubscriptionsForUser(String user) throws SubscriptionException { - File userRoot = new File(store.userRoot(Username.of(user))); + private Set<String> readSubscriptionsForUser(Username user) throws SubscriptionException { + File userRoot = new File(store.userRoot(user)); try { return readSubscriptions(userRoot); } catch (IOException e) { diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java index d0c8336..a94de8c 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java @@ -20,6 +20,7 @@ package org.apache.james.mailbox.inmemory.user; import java.util.List; +import org.apache.james.core.Username; import org.apache.james.mailbox.store.transaction.NonTransactionalMapper; import org.apache.james.mailbox.store.user.SubscriptionMapper; import org.apache.james.mailbox.store.user.model.Subscription; @@ -31,7 +32,7 @@ import com.google.common.collect.Multimaps; public class InMemorySubscriptionMapper extends NonTransactionalMapper implements SubscriptionMapper { - private final ListMultimap<String, Subscription> subscriptionsByUser; + private final ListMultimap<Username, Subscription> subscriptionsByUser; public InMemorySubscriptionMapper() { subscriptionsByUser = Multimaps.synchronizedListMultimap(ArrayListMultimap.create()); @@ -43,7 +44,7 @@ public class InMemorySubscriptionMapper extends NonTransactionalMapper implement } @Override - public Subscription findMailboxSubscriptionForUser(String user, String mailbox) { + public Subscription findMailboxSubscriptionForUser(Username user, String mailbox) { final List<Subscription> subscriptions = ImmutableList.copyOf(subscriptionsByUser.get(user)); if (subscriptions != null) { return subscriptions.stream() @@ -55,7 +56,7 @@ public class InMemorySubscriptionMapper extends NonTransactionalMapper implement } @Override - public List<Subscription> findSubscriptionsForUser(String user) { + public List<Subscription> findSubscriptionsForUser(Username user) { final List<Subscription> subcriptions = subscriptionsByUser.get(user); if (subcriptions == null) { return ImmutableList.of(); diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java index 4533368..f678ff1 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java @@ -54,7 +54,7 @@ public class StoreSubscriptionManager implements SubscriptionManager { final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session); try { mapper.execute(Mapper.toTransaction(() -> { - Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().asString(), mailbox); + Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser(), mailbox); if (subscription == null) { Subscription newSubscription = createSubscription(session, mailbox); mapper.save(newSubscription); @@ -71,13 +71,13 @@ public class StoreSubscriptionManager implements SubscriptionManager { * If you need something more special just override this method */ protected Subscription createSubscription(MailboxSession session, String mailbox) { - return new SimpleSubscription(session.getUser().asString(), mailbox); + return new SimpleSubscription(session.getUser(), mailbox); } @Override public Collection<String> subscriptions(MailboxSession session) throws SubscriptionException { return mapperFactory.getSubscriptionMapper(session) - .findSubscriptionsForUser(session.getUser().asString()) + .findSubscriptionsForUser(session.getUser()) .stream() .map(Subscription::getMailbox) .collect(Collectors.toCollection(() -> new HashSet<>(INITIAL_SIZE))); @@ -88,7 +88,7 @@ public class StoreSubscriptionManager implements SubscriptionManager { final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session); try { mapper.execute(Mapper.toTransaction(() -> { - Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().asString(), mailbox); + Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser(), mailbox); if (subscription != null) { mapper.delete(subscription); } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java index 48ee42f..0b10e5c 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java @@ -20,6 +20,7 @@ package org.apache.james.mailbox.store.user; import java.util.List; +import org.apache.james.core.Username; import org.apache.james.mailbox.exception.SubscriptionException; import org.apache.james.mailbox.store.transaction.Mapper; import org.apache.james.mailbox.store.user.model.Subscription; @@ -38,8 +39,7 @@ public interface SubscriptionMapper extends Mapper { * @return <code>Subscription</code>, * or null when the user is not subscribed to the given mailbox */ - Subscription findMailboxSubscriptionForUser( - final String user, String mailbox) throws SubscriptionException; + Subscription findMailboxSubscriptionForUser(Username user, String mailbox) throws SubscriptionException; /** * Saves the given subscription. @@ -52,7 +52,7 @@ public interface SubscriptionMapper extends Mapper { * @param user not null * @return not null */ - List<Subscription> findSubscriptionsForUser(String user) throws SubscriptionException; + List<Subscription> findSubscriptionsForUser(Username user) throws SubscriptionException; /** * Deletes the given subscription. diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java index a967b58..c2ad141 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java @@ -18,6 +18,8 @@ ****************************************************************/ package org.apache.james.mailbox.store.user.model; +import org.apache.james.core.Username; + /** * * Subscription of a mailbox to a user @@ -40,6 +42,6 @@ public interface Subscription { * * @return not null */ - String getUser(); + Username getUser(); } \ No newline at end of file diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java index 7b34615..2d01c99 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java @@ -18,16 +18,17 @@ ****************************************************************/ package org.apache.james.mailbox.store.user.model.impl; +import org.apache.james.core.Username; import org.apache.james.mailbox.store.user.model.Subscription; import com.google.common.base.Objects; public class SimpleSubscription implements Subscription { - private final String user; + private final Username user; private final String mailbox; - public SimpleSubscription(String user, String mailbox) { + public SimpleSubscription(Username user, String mailbox) { this.user = user; this.mailbox = mailbox; } @@ -38,7 +39,7 @@ public class SimpleSubscription implements Subscription { } @Override - public String getUser() { + public Username getUser() { return user; } diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java index f085ff8..81a5286 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java @@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.List; +import org.apache.james.core.Username; import org.apache.james.mailbox.exception.SubscriptionException; import org.apache.james.mailbox.store.user.model.Subscription; import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription; @@ -30,8 +31,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public abstract class SubscriptionMapperTest { - private static final String USER_1 = "user1"; - private static final String USER_2 = "user2"; + private static final Username USER_1 = Username.of("user1"); + private static final Username USER_2 = Username.of("user2"); private static final String MAILBOX_1 = "mailbox1"; private static final String MAILBOX_2 = "mailbox2"; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org