MAILBOX-307 Extract long lambda in StoreMailboxManager Suggested by @rouazana review comment.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/183a372a Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/183a372a Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/183a372a Branch: refs/heads/master Commit: 183a372a956d470d34d999dc2ba46dab6b767176 Parents: 774694c Author: benwa <btell...@linagora.com> Authored: Thu Sep 28 09:55:06 2017 +0700 Committer: Matthieu Baechler <matth...@apache.org> Committed: Fri Sep 29 09:20:41 2017 +0200 ---------------------------------------------------------------------- .../mailbox/store/StoreMailboxManager.java | 69 ++++++++++---------- 1 file changed, 33 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/183a372a/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 2655ac8..c96b1de 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 @@ -589,50 +589,47 @@ public class StoreMailboxManager implements MailboxManager { } @Override - public void renameMailbox(final MailboxPath from, final MailboxPath to, final MailboxSession session) throws MailboxException { - final Logger log = LOGGER; - if (log.isDebugEnabled()) - log.debug("renameMailbox " + from + " to " + to); + public void renameMailbox(MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException { + LOGGER.debug("renameMailbox " + from + " to " + to); if (mailboxExists(to, session)) { throw new MailboxExistsException(to.toString()); } - final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - mapper.execute(Mapper.toTransaction(() -> { - // TODO put this into a serilizable transaction - final Mailbox mailbox = mapper.findMailboxByPath(from); - if (mailbox == null) { - throw new MailboxNotFoundException(from); + MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); + mapper.execute(Mapper.toTransaction(() -> doRenameMailbox(from, to, session, mapper))); + } + + private void doRenameMailbox(MailboxPath from, MailboxPath to, MailboxSession session, MailboxMapper mapper) throws MailboxException { + // TODO put this into a serilizable transaction + Mailbox mailbox = Optional.ofNullable(mapper.findMailboxByPath(from)) + .orElseThrow(() -> 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 + MailboxPath children = new MailboxPath(MailboxConstants.USER_NAMESPACE, from.getUser(), from.getName() + getDelimiter() + "%"); + locker.executeWithLock(session, children, (LockAwareExecution<Void>) () -> { + List<Mailbox> subMailboxes = mapper.findMailboxWithPathLike(children); + for (Mailbox sub : subMailboxes) { + String subOriginalName = sub.getName(); + String subNewName = to.getName() + subOriginalName.substring(from.getName().length()); + MailboxPath fromPath = new MailboxPath(children, subOriginalName); + sub.setName(subNewName); + mapper.save(sub); + dispatcher.mailboxRenamed(session, fromPath, sub); + + LOGGER.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); } - @Override public List<MessageRange> copyMessages(MessageRange set, MailboxPath from, MailboxPath to, final MailboxSession session) throws MailboxException { final StoreMessageManager toMailbox = (StoreMessageManager) getMailbox(to, session); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org