You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/19 02:43:35 UTC
[james-project] 33/43: JAMES-2949 Username strong typing for
subscriptions
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org