private Iterator<MessageMetaData> copy(Iterator<MailboxMessage> originalRows, MailboxSession session) throws MailboxException { final List<MessageMetaData> copiedRows = new ArrayList<>(); final MessageMapper messageMapper = mapperFactory.getMessageMapper(session); while (originalRows.hasNext()) { final MailboxMessage originalMessage = originalRows.next(); new QuotaChecker(quotaManager, quotaRootResolver, mailbox) .tryAddition(1, originalMessage.getFullContentOctets()); MessageMetaData data = messageMapper.execute( () -> messageMapper.copy(getMailboxEntity(), originalMessage)); dispatcher.added(session, this.getMailboxEntity(), immutableMailboxMessageFactory.from(getMailboxEntity().getMailboxId(), originalMessage)); copiedRows.add(data); } return copiedRows.iterator(); }