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 6ce97d9b271c3fbe147afc294edac08160d6a363 Author: Benoit Tellier <[email protected]> AuthorDate: Thu Apr 4 11:10:13 2019 +0700 JAMES-2723 JPAMailbox should not implement Mailbox API --- .../james/mailbox/jpa/JPAMailboxManager.java | 4 +- .../james/mailbox/jpa/JPAMessageManager.java | 2 +- .../james/mailbox/jpa/mail/JPAMailboxMapper.java | 49 +++++--- .../james/mailbox/jpa/mail/JPAMessageMapper.java | 5 +- .../james/mailbox/jpa/mail/model/JPAMailbox.java | 136 ++++++++++----------- 5 files changed, 99 insertions(+), 97 deletions(-) diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java index 22e3f77..2b28cba 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java @@ -22,10 +22,10 @@ import java.util.EnumSet; import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.SimpleMailbox; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.jpa.mail.JPAMailboxMapper; -import org.apache.james.mailbox.jpa.mail.model.JPAMailbox; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageId; @@ -68,7 +68,7 @@ public abstract class JPAMailboxManager extends StoreMailboxManager { @Override protected Mailbox doCreateMailbox(MailboxPath path, MailboxSession session) { - return new JPAMailbox(path, randomUidValidity()); + return new SimpleMailbox(path, randomUidValidity()); } @Override diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java index 8d86795..4dc500b 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java @@ -70,7 +70,7 @@ public class JPAMessageManager extends StoreMessageManager { protected MailboxMessage createMessage(Date internalDate, int size, int bodyStartOctet, SharedInputStream content, final Flags flags, PropertyBuilder propertyBuilder, List<MessageAttachment> attachments) throws MailboxException { - return new JPAMailboxMessage((JPAMailbox) getMailboxEntity(), internalDate, size, flags, content, bodyStartOctet, propertyBuilder); + return new JPAMailboxMessage(JPAMailbox.from(getMailboxEntity()), internalDate, size, flags, content, bodyStartOctet, propertyBuilder); } diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java index 4e8eaaa..91df53b 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java @@ -26,6 +26,7 @@ import javax.persistence.EntityManagerFactory; import javax.persistence.NoResultException; import javax.persistence.PersistenceException; import javax.persistence.RollbackException; +import javax.persistence.TypedQuery; import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; @@ -41,6 +42,7 @@ import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.store.mail.MailboxMapper; +import com.github.steveash.guavate.Guavate; import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; @@ -114,13 +116,15 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM return getEntityManager().createNamedQuery("findMailboxByName", JPAMailbox.class) .setParameter("nameParam", mailboxPath.getName()) .setParameter("namespaceParam", mailboxPath.getNamespace()) - .getSingleResult(); + .getSingleResult() + .toMailbox(); } else { return getEntityManager().createNamedQuery("findMailboxByNameWithUser", JPAMailbox.class) .setParameter("nameParam", mailboxPath.getName()) .setParameter("namespaceParam", mailboxPath.getNamespace()) .setParameter("userParam", mailboxPath.getUser()) - .getSingleResult(); + .getSingleResult() + .toMailbox(); } } catch (NoResultException e) { throw new MailboxNotFoundException(mailboxPath); @@ -135,7 +139,8 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM try { return getEntityManager().createNamedQuery("findMailboxById", JPAMailbox.class) .setParameter("idParam", mailboxId.getRawId()) - .getSingleResult(); + .getSingleResult() + .toMailbox(); } catch (NoResultException e) { throw new MailboxNotFoundException(mailboxId); } catch (PersistenceException e) { @@ -158,23 +163,29 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM @Override public List<Mailbox> findMailboxWithPathLike(MailboxPath path) throws MailboxException { try { - if (path.getUser() == null) { - return getEntityManager().createNamedQuery("findMailboxWithNameLike", Mailbox.class) - .setParameter("nameParam", path.getName()) - .setParameter("namespaceParam", path.getNamespace()) - .getResultList(); - } else { - return getEntityManager().createNamedQuery("findMailboxWithNameLikeWithUser", Mailbox.class) - .setParameter("nameParam", path.getName()) - .setParameter("namespaceParam", path.getNamespace()) - .setParameter("userParam", path.getUser()) - .getResultList(); - } + return findMailboxWithPathLikeTypedQuery(path) + .getResultList() + .stream() + .map(JPAMailbox::toMailbox) + .collect(Guavate.toImmutableList()); } catch (PersistenceException e) { throw new MailboxException("Search of mailbox " + path + " failed", e); } } + private TypedQuery<JPAMailbox> findMailboxWithPathLikeTypedQuery(MailboxPath path) { + if (path.getUser() == null) { + return getEntityManager().createNamedQuery("findMailboxWithNameLike", JPAMailbox.class) + .setParameter("nameParam", path.getName()) + .setParameter("namespaceParam", path.getNamespace()); + } else { + return getEntityManager().createNamedQuery("findMailboxWithNameLikeWithUser", JPAMailbox.class) + .setParameter("nameParam", path.getName()) + .setParameter("namespaceParam", path.getNamespace()) + .setParameter("userParam", path.getUser()); + } + } + public void deleteAllMemberships() throws MailboxException { try { getEntityManager().createNamedQuery("deleteAllMemberships").executeUpdate(); @@ -192,8 +203,7 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM } @Override - public boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException, - MailboxNotFoundException { + public boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException, MailboxNotFoundException { final String name = mailbox.getName() + delimiter + SQL_WILDCARD_CHAR; final Long numberOfChildMailboxes; if (mailbox.getUser() == null) { @@ -207,7 +217,10 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM @Override public List<Mailbox> list() throws MailboxException { try { - return getEntityManager().createNamedQuery("listMailboxes", Mailbox.class).getResultList(); + return getEntityManager().createNamedQuery("listMailboxes", JPAMailbox.class).getResultList() + .stream() + .map(JPAMailbox::toMailbox) + .collect(Guavate.toImmutableList()); } catch (PersistenceException e) { throw new MailboxException("Delete of mailboxes failed", e); } diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java index f5c6e09..f7fde59 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java @@ -269,7 +269,7 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM JPAMailbox originalMailbox = getEntityManager().find(JPAMailbox.class, originalMailboxId.getRawId()); MessageMetaData messageMetaData = copy(mailbox, original); - delete(originalMailbox, original); + delete(originalMailbox.toMailbox(), original); return messageMetaData; } @@ -333,8 +333,7 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM } /** - * @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#save(Mailbox, - * MailboxMessage) + * @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#save(Mailbox, MailboxMessage) */ protected MessageMetaData save(Mailbox mailbox, MailboxMessage message) throws MailboxException { try { diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java index e7449c7..aa46e53 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java @@ -27,11 +27,9 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MailboxUtil; +import org.apache.james.mailbox.SimpleMailbox; import org.apache.james.mailbox.jpa.JPAId; import org.apache.james.mailbox.model.Mailbox; -import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; @@ -61,10 +59,14 @@ import org.apache.james.mailbox.model.MailboxPath; @NamedQuery(name = "findLastUid", query = "SELECT mailbox.lastUid FROM Mailbox mailbox WHERE mailbox.mailboxId = :idParam") }) -public class JPAMailbox implements Mailbox { +public class JPAMailbox { private static final String TAB = " "; + public static JPAMailbox from(Mailbox mailbox) { + return new JPAMailbox(mailbox); + } + /** The value for the mailboxId field */ @Id @GeneratedValue @@ -96,13 +98,6 @@ public class JPAMailbox implements Mailbox { @Basic(optional = false) @Column(name = "MAILBOX_HIGHEST_MODSEQ", nullable = true) private long highestModSeq; - - public static JPAMailbox from(Mailbox mailbox) { - if (mailbox instanceof JPAMailbox) { - return (JPAMailbox) mailbox; - } - return new JPAMailbox(mailbox); - } /** * JPA only @@ -122,34 +117,80 @@ public class JPAMailbox implements Mailbox { this(mailbox.generateAssociatedPath(), mailbox.getUidValidity()); } - @Override public JPAId getMailboxId() { return JPAId.of(mailboxId); } - @Override public void setMailboxId(MailboxId mailboxId) { this.mailboxId = ((JPAId)mailboxId).getRawId(); } - @Override + public long consumeUid() { + return ++lastUid; + } + + public long consumeModSeq() { + return ++highestModSeq; + } + + public Mailbox toMailbox() { + return new SimpleMailbox(generateAssociatedPath(), uidValidity, new JPAId(mailboxId)); + } + + public MailboxPath generateAssociatedPath() { + return new MailboxPath(namespace, user, name); + } + + public void setMailboxId(long mailboxId) { + this.mailboxId = mailboxId; + } + public String getName() { return name; } - @Override + public void setName(String name) { + this.name = name; + } + public long getUidValidity() { return uidValidity; } - - @Override - public void setName(String name) { - this.name = name; + + public void setUidValidity(long uidValidity) { + this.uidValidity = uidValidity; } - @Override - public MailboxPath generateAssociatedPath() { - return new MailboxPath(getNamespace(), getUser(), getName()); + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getNamespace() { + return namespace; + } + + public void setNamespace(String namespace) { + this.namespace = namespace; + } + + public long getLastUid() { + return lastUid; + } + + public void setLastUid(long lastUid) { + this.lastUid = lastUid; + } + + public long getHighestModSeq() { + return highestModSeq; + } + + public void setHighestModSeq(long highestModSeq) { + this.highestModSeq = highestModSeq; } @Override @@ -186,55 +227,4 @@ public class JPAMailbox implements Mailbox { } return true; } - - @Override - public String getNamespace() { - return namespace; - } - - @Override - public String getUser() { - return user; - } - - @Override - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - @Override - public void setUser(String user) { - this.user = user; - } - - - public long getLastUid() { - return lastUid; - } - - public long getHighestModSeq() { - return highestModSeq; - } - - public long consumeUid() { - return ++lastUid; - } - - public long consumeModSeq() { - return ++highestModSeq; - } - - @Override - public MailboxACL getACL() { - return MailboxACL.EMPTY; - } - - @Override - public void setACL(MailboxACL acl) { - } - - @Override - public boolean isChildOf(Mailbox potentialParent, MailboxSession mailboxSession) { - return MailboxUtil.isMailboxChildOf(this, potentialParent, mailboxSession); - } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
