public void copyMailboxes()

in mailbox/tools/copier/src/main/java/org/apache/james/mailbox/tools/copier/MailboxCopierImpl.java [51:132]


    public void copyMailboxes(MailboxManager srcMailboxManager, MailboxManager dstMailboxManager) throws MailboxException, IOException {
        
        Calendar start = Calendar.getInstance();

        MailboxSession srcMailboxSession;
        MailboxSession dstMailboxSession;

        List<MailboxPath> mailboxPathList = null;

        srcMailboxSession = srcMailboxManager.createSystemSession(Username.of("manager"));
        srcMailboxManager.startProcessingRequest(srcMailboxSession);
        mailboxPathList = srcMailboxManager.list(srcMailboxSession);
        srcMailboxManager.endProcessingRequest(srcMailboxSession);

        if (LOGGER.isInfoEnabled()) {
            LOGGER.info("Found " + mailboxPathList.size() + " mailboxes in source mailbox manager.");
            for (int i = 0; i < mailboxPathList.size(); i++) {
                LOGGER.info("Mailbox#" + i + " path=" + mailboxPathList.get(i));
            }
        }

        MailboxPath mailboxPath = null;
        
        for (int i = 0; i < mailboxPathList.size(); i++) {
        
            mailboxPath = mailboxPathList.get(i);
            
            if ((mailboxPath.getName() != null) && (mailboxPath.getName().trim().length() > 0)) {
                
                LOGGER.info("Ready to copy source mailbox path={}", mailboxPath);

                srcMailboxSession = srcMailboxManager.createSystemSession(mailboxPath.getUser());
                dstMailboxSession = dstMailboxManager.createSystemSession(mailboxPath.getUser());

                dstMailboxManager.startProcessingRequest(dstMailboxSession);
                try {
                    dstMailboxManager.createMailbox(mailboxPath, dstMailboxSession);
                    LOGGER.info("Destination mailbox {}/{} created with path={} after {} ms.", i, mailboxPathList.size(), mailboxPath, Calendar.getInstance().getTimeInMillis() - start.getTimeInMillis());
                } catch (MailboxExistsException e) {
                    LOGGER.error("Mailbox {} with path={} already exists.", i, mailboxPath, e);
                }
                dstMailboxManager.endProcessingRequest(dstMailboxSession);

                srcMailboxManager.startProcessingRequest(srcMailboxSession);
                MessageManager srcMessageManager = srcMailboxManager.getMailbox(mailboxPath, srcMailboxSession);
                srcMailboxManager.endProcessingRequest(srcMailboxSession);

                dstMailboxManager.startProcessingRequest(dstMailboxSession);
                MessageManager dstMessageManager = dstMailboxManager.getMailbox(mailboxPath, dstMailboxSession);

                int j = 0;
                Iterator<MessageResult> messageResultIterator = srcMessageManager.getMessages(MessageRange.all(), FetchGroup.FULL_CONTENT, srcMailboxSession);
                
                while (messageResultIterator.hasNext()) {

                    MessageResult messageResult = messageResultIterator.next();
                    InputStreamContent content = (InputStreamContent) messageResult.getFullContent();

                    dstMailboxManager.startProcessingRequest(dstMailboxSession);
                    dstMessageManager.appendMessage(
                        MessageManager.AppendCommand.builder()
                            .withInternalDate(messageResult.getInternalDate())
                            .isRecent(messageResult.getFlags().contains(Flag.RECENT))
                            .withFlags(messageResult.getFlags())
                            .build(content),
                        dstMailboxSession);
                    dstMailboxManager.endProcessingRequest(dstMailboxSession);
                    LOGGER.info("MailboxMessage #{} appended in destination mailbox with path={}", j, mailboxPath);
                    j++;

                }
                dstMailboxManager.endProcessingRequest(dstMailboxSession);

            } else {
                LOGGER.info("Destination mailbox {}/{} with path={} has a null or empty name", i, mailboxPathList.size(), mailboxPath);
            }

        }

        LOGGER.info("Mailboxes copied in {} ms.", Calendar.getInstance().getTimeInMillis() - start.getTimeInMillis());

    }