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());
}