Repository: james-project
Updated Branches:
  refs/heads/master 45c3dfb55 -> a2f22af4c


MAILBOX-307 Replace Transaction<Void> by lambda when working with Mappers


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3b247fd8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3b247fd8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3b247fd8

Branch: refs/heads/master
Commit: 3b247fd8adc546880220965a91ced10ea691be77
Parents: f388ff9
Author: benwa <btell...@linagora.com>
Authored: Mon Sep 25 15:26:14 2017 +0700
Committer: Matthieu Baechler <matth...@apache.org>
Committed: Fri Sep 29 09:20:39 2017 +0200

----------------------------------------------------------------------
 .../mailbox/hbase/HBaseMailboxManager.java      |  18 +---
 .../james/mailbox/jpa/JPAMailboxManager.java    |  14 +--
 .../jpa/mail/TransactionalAnnotationMapper.java |  15 +--
 .../jpa/mail/TransactionalMailboxMapper.java    |  12 +--
 .../jpa/mail/TransactionalMessageMapper.java    |  11 +-
 .../mailbox/store/StoreMailboxManager.java      | 100 ++++++++-----------
 .../mailbox/store/StoreSubscriptionManager.java |  30 ++----
 .../james/mailbox/store/transaction/Mapper.java |  18 ++--
 8 files changed, 77 insertions(+), 141 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
index 1540b7b..72889f1 100644
--- 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
+++ 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
@@ -36,7 +36,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.transaction.TransactionalMapper;
+import org.apache.james.mailbox.store.transaction.Mapper;
 
 /**
  * HBase implementation of {@link StoreMailboxManager}
@@ -71,20 +71,8 @@ public class HBaseMailboxManager extends StoreMailboxManager 
{
 
         final HBaseMailboxMapper mapper = (HBaseMailboxMapper) 
getMapperFactory().getMailboxMapper(mailboxSession);
 
-        mapper.execute(new TransactionalMapper.VoidTransaction() {
-
-            @Override
-            public void runVoid() throws MailboxException {
-                mapper.deleteAllMemberships();
-            }
-        });
-        mapper.execute(new TransactionalMapper.VoidTransaction() {
-
-            @Override
-            public void runVoid() throws MailboxException {
-                mapper.deleteAllMailboxes();
-            }
-        });
+        mapper.execute(Mapper.toTransaction(mapper::deleteAllMemberships));
+        mapper.execute(Mapper.toTransaction(mapper::deleteAllMailboxes));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
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 d8180c7..a3d4f16 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
@@ -34,7 +34,7 @@ import org.apache.james.mailbox.store.Authorizator;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.transaction.TransactionalMapper;
+import org.apache.james.mailbox.store.transaction.Mapper;
 
 /**
  * JPA implementation of {@link StoreMailboxManager}
@@ -74,16 +74,8 @@ public abstract class JPAMailboxManager extends 
StoreMailboxManager {
      */
     public void deleteEverything(MailboxSession mailboxSession) throws 
MailboxException {
         final JPAMailboxMapper mapper = (JPAMailboxMapper) 
getMapperFactory().getMailboxMapper(mailboxSession);
-        mapper.execute(new TransactionalMapper.VoidTransaction() {
-            public void runVoid() throws MailboxException {
-                mapper.deleteAllMemberships(); 
-            }
-        });
-        mapper.execute(new TransactionalMapper.VoidTransaction() {
-            public void runVoid() throws MailboxException {
-                mapper.deleteAllMailboxes(); 
-            }
-        });
+        mapper.execute(Mapper.toTransaction(mapper::deleteAllMemberships));
+        mapper.execute(Mapper.toTransaction(mapper::deleteAllMailboxes));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java
 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java
index 0cc48b0..5d22541 100644
--- 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java
+++ 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java
@@ -28,6 +28,7 @@ import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
+import org.apache.james.mailbox.store.transaction.Mapper;
 
 import com.google.common.base.Throwables;
 
@@ -71,12 +72,7 @@ public class TransactionalAnnotationMapper implements 
AnnotationMapper {
     @Override
     public void deleteAnnotation(final MailboxId mailboxId, final 
MailboxAnnotationKey key) {
         try {
-            wrapped.execute(new VoidTransaction() {
-                @Override
-                public void runVoid() throws MailboxException {
-                    wrapped.deleteAnnotation(mailboxId, key);
-                }
-            });
+            wrapped.execute(Mapper.toTransaction(() -> 
wrapped.deleteAnnotation(mailboxId, key)));
         } catch (MailboxException e) {
             Throwables.propagate(e);
         }
@@ -85,12 +81,7 @@ public class TransactionalAnnotationMapper implements 
AnnotationMapper {
     @Override
     public void insertAnnotation(final MailboxId mailboxId, final 
MailboxAnnotation mailboxAnnotation) {
         try {
-            wrapped.execute(new VoidTransaction() {
-                @Override
-                public void runVoid() throws MailboxException {
-                    wrapped.insertAnnotation(mailboxId, mailboxAnnotation);
-                }
-            });
+            wrapped.execute(Mapper.toTransaction(() -> 
wrapped.insertAnnotation(mailboxId, mailboxAnnotation)));
         } catch (MailboxException e) {
             Throwables.propagate(e);
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
index 6e8ba66..f828dfd 100644
--- 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
+++ 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.transaction.Mapper;
 
 public class TransactionalMailboxMapper implements MailboxMapper {
     private final JPAMailboxMapper wrapped;
@@ -48,18 +49,13 @@ public class TransactionalMailboxMapper implements 
MailboxMapper {
     }
 
     @Override
-    public MailboxId save(final Mailbox mailbox) throws MailboxException {
+    public MailboxId save(Mailbox mailbox) throws MailboxException {
         return wrapped.execute(() -> wrapped.save(mailbox));
     }
 
     @Override
-    public void delete(final Mailbox mailbox) throws MailboxException {
-        wrapped.execute(new VoidTransaction() {
-                @Override
-                public void runVoid() throws MailboxException {
-                    wrapped.delete(mailbox);
-                }
-            });
+    public void delete(Mailbox mailbox) throws MailboxException {
+        wrapped.execute(Mapper.toTransaction(() -> wrapped.delete(mailbox)));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
index 0bfd7f5..8aec65a 100644
--- 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
+++ 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
@@ -23,8 +23,10 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+
 import javax.mail.Flags;
 
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxCounters;
@@ -35,7 +37,7 @@ import org.apache.james.mailbox.store.FlagsUpdateCalculator;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.mailbox.store.transaction.Mapper;
 
 public class TransactionalMessageMapper implements MessageMapper {
     private final JPAMessageMapper messageMapper;
@@ -92,12 +94,7 @@ public class TransactionalMessageMapper implements 
MessageMapper {
 
     @Override
     public void delete(final Mailbox mailbox, final MailboxMessage message) 
throws MailboxException {
-        messageMapper.execute(new VoidTransaction() {
-            @Override
-            public void runVoid() throws MailboxException {
-                messageMapper.delete(mailbox, message);
-            }
-        });
+        messageMapper.execute(Mapper.toTransaction(() -> 
messageMapper.delete(mailbox, message)));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 710790b..a9398df 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -82,7 +82,6 @@ import 
org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.mailbox.store.transaction.Mapper;
-import org.apache.james.mailbox.store.transaction.TransactionalMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -552,13 +551,7 @@ public class StoreMailboxManager implements MailboxManager 
{
                     if (!mailboxExists(mailbox, mailboxSession)) {
                         final Mailbox m = doCreateMailbox(mailbox, 
mailboxSession);
                         final MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
-                        mapper.execute(new 
TransactionalMapper.VoidTransaction() {
-
-                            public void runVoid() throws MailboxException {
-                                mailboxIds.add(mapper.save(m));
-                            }
-
-                        });
+                        mapper.execute(Mapper.toTransaction(() -> 
mailboxIds.add(mapper.save(m))));
 
                         // notify listeners
                         dispatcher.mailboxAdded(mailboxSession, m);
@@ -606,41 +599,38 @@ public class StoreMailboxManager implements 
MailboxManager {
         }
 
         final MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        mapper.execute(new Mapper.VoidTransaction() {
-
-            public void runVoid() throws MailboxException {
-                // TODO put this into a serilizable transaction
-                final Mailbox mailbox = mapper.findMailboxByPath(from);
-                if (mailbox == null) {
-                    throw new MailboxNotFoundException(from);
+        mapper.execute(Mapper.toTransaction(() -> {
+            // TODO put this into a serilizable transaction
+            final Mailbox mailbox = mapper.findMailboxByPath(from);
+            if (mailbox == null) {
+                throw new MailboxNotFoundException(from);
+            }
+            mailbox.setNamespace(to.getNamespace());
+            mailbox.setUser(to.getUser());
+            mailbox.setName(to.getName());
+            mapper.save(mailbox);
+
+            dispatcher.mailboxRenamed(session, from, mailbox);
+
+            // rename submailboxes
+            final MailboxPath children = new 
MailboxPath(MailboxConstants.USER_NAMESPACE, from.getUser(), from.getName() + 
getDelimiter() + "%");
+            locker.executeWithLock(session, children, 
(LockAwareExecution<Void>) () -> {
+                final List<Mailbox> subMailboxes = 
mapper.findMailboxWithPathLike(children);
+                for (Mailbox sub : subMailboxes) {
+                    final String subOriginalName = sub.getName();
+                    final String subNewName = to.getName() + 
subOriginalName.substring(from.getName().length());
+                    final MailboxPath fromPath = new MailboxPath(children, 
subOriginalName);
+                    sub.setName(subNewName);
+                    mapper.save(sub);
+                    dispatcher.mailboxRenamed(session, fromPath, sub);
+
+                    if (log.isDebugEnabled())
+                        log.debug("Rename mailbox sub-mailbox " + 
subOriginalName + " to " + subNewName);
                 }
-                mailbox.setNamespace(to.getNamespace());
-                mailbox.setUser(to.getUser());
-                mailbox.setName(to.getName());
-                mapper.save(mailbox);
-
-                dispatcher.mailboxRenamed(session, from, mailbox);
-
-                // rename submailboxes
-                final MailboxPath children = new 
MailboxPath(MailboxConstants.USER_NAMESPACE, from.getUser(), from.getName() + 
getDelimiter() + "%");
-                locker.executeWithLock(session, children, 
(LockAwareExecution<Void>) () -> {
-                    final List<Mailbox> subMailboxes = 
mapper.findMailboxWithPathLike(children);
-                    for (Mailbox sub : subMailboxes) {
-                        final String subOriginalName = sub.getName();
-                        final String subNewName = to.getName() + 
subOriginalName.substring(from.getName().length());
-                        final MailboxPath fromPath = new MailboxPath(children, 
subOriginalName);
-                        sub.setName(subNewName);
-                        mapper.save(sub);
-                        dispatcher.mailboxRenamed(session, fromPath, sub);
-
-                        if (log.isDebugEnabled())
-                            log.debug("Rename mailbox sub-mailbox " + 
subOriginalName + " to " + subNewName);
-                    }
-                    return null;
+                return null;
 
-                }, true);
-            }
-        });
+            }, true);
+        }));
     }
 
 
@@ -827,17 +817,10 @@ public class StoreMailboxManager implements 
MailboxManager {
     }
 
     @Override
-    public void setRights(MailboxPath mailboxPath, final 
MailboxACL.MailboxACLCommand mailboxACLCommand, MailboxSession session) throws 
MailboxException {
+    public void setRights(MailboxPath mailboxPath, 
MailboxACL.MailboxACLCommand mailboxACLCommand, MailboxSession session) throws 
MailboxException {
         final MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
         final Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
-        mapper.execute(
-            new Mapper.VoidTransaction() {
-                @Override
-                public void runVoid() throws MailboxException {
-                    mapper.updateACL(mailbox, mailboxACLCommand);
-                }
-            }
-        );
+        mapper.execute(Mapper.toTransaction(() -> mapper.updateACL(mailbox, 
mailboxACLCommand)));
     }
 
     @Override
@@ -865,18 +848,15 @@ public class StoreMailboxManager implements 
MailboxManager {
         final AnnotationMapper annotationMapper = 
mailboxSessionMapperFactory.getAnnotationMapper(session);
         final MailboxId mailboxId = getMailbox(mailboxPath, session).getId();
 
-        annotationMapper.execute(new Mapper.VoidTransaction() {
-            @Override
-            public void runVoid() throws MailboxException {
-                for (MailboxAnnotation annotation : mailboxAnnotations) {
-                    if (annotation.isNil()) {
-                        annotationMapper.deleteAnnotation(mailboxId, 
annotation.getKey());
-                    } else if (canInsertOrUpdate(mailboxId, annotation, 
annotationMapper)) {
-                        annotationMapper.insertAnnotation(mailboxId, 
annotation);
-                    }
+        annotationMapper.execute(Mapper.toTransaction(() -> {
+            for (MailboxAnnotation annotation : mailboxAnnotations) {
+                if (annotation.isNil()) {
+                    annotationMapper.deleteAnnotation(mailboxId, 
annotation.getKey());
+                } else if (canInsertOrUpdate(mailboxId, annotation, 
annotationMapper)) {
+                    annotationMapper.insertAnnotation(mailboxId, annotation);
                 }
             }
-        });
+        }));
     }
 
     private boolean canInsertOrUpdate(MailboxId mailboxId, MailboxAnnotation 
annotation, AnnotationMapper annotationMapper) throws AnnotationException {

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java
----------------------------------------------------------------------
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 fb0c38c..b804ee3 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
@@ -55,17 +55,13 @@ public class StoreSubscriptionManager implements 
SubscriptionManager {
     public void subscribe(final MailboxSession session, final String mailbox) 
throws SubscriptionException {
         final SubscriptionMapper mapper = 
mapperFactory.getSubscriptionMapper(session);
         try {
-            mapper.execute(new Mapper.VoidTransaction() {
-
-                public void runVoid() throws MailboxException {
-                    final Subscription subscription = 
mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox);
-                    if (subscription == null) {
-                        final Subscription newSubscription = 
createSubscription(session, mailbox);
-                        mapper.save(newSubscription);
-                    }
+            mapper.execute(Mapper.toTransaction(() -> {
+                Subscription subscription = 
mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox);
+                if (subscription == null) {
+                    Subscription newSubscription = createSubscription(session, 
mailbox);
+                    mapper.save(newSubscription);
                 }
-                
-            });
+            }));
         } catch (MailboxException e) {
             throw new SubscriptionException(e);
         }
@@ -101,16 +97,12 @@ public class StoreSubscriptionManager implements 
SubscriptionManager {
     public void unsubscribe(final MailboxSession session, final String 
mailbox) throws SubscriptionException {
         final SubscriptionMapper mapper = 
mapperFactory.getSubscriptionMapper(session);
         try {
-            mapper.execute(new Mapper.VoidTransaction() {
-
-                public void runVoid() throws MailboxException {
-                    final Subscription subscription = 
mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox);
-                    if (subscription != null) {
-                        mapper.delete(subscription);
-                    }
+            mapper.execute(Mapper.toTransaction(() -> {
+                Subscription subscription = 
mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox);
+                if (subscription != null) {
+                    mapper.delete(subscription);
                 }
-
-            });
+            }));
         } catch (MailboxException e) {
             throw new SubscriptionException(e);
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java
index 8d41340..22485c0 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java
@@ -53,15 +53,15 @@ public interface Mapper {
          */
         T run() throws MailboxException;
     }
-    
-    
-    abstract class VoidTransaction implements Transaction<Void> {
-        
-        public final Void run() throws MailboxException {
-            runVoid();
-            return null;
-        }
-        public abstract void runVoid() throws MailboxException;
 
+    interface Operation {
+        void run() throws MailboxException;
+    }
+
+    static Transaction<Void> toTransaction(Operation operation) throws 
MailboxException {
+        return () -> {
+            operation.run();
+            return null;
+        };
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to