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]

Reply via email to