package fr.keemto.provider.exchange.importer; import com.google.common.base.Function; import com.google.common.collect.Lists; import fr.keemto.provider.exchange.Email; import microsoft.exchange.webservices.data.EmailAddress; import microsoft.exchange.webservices.data.EmailMessage; import microsoft.exchange.webservices.data.ServiceLocalException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.*; public class MailFinder { private static final Logger log = LoggerFactory.getLogger(MailFinder.class); private ExchangeServiceWrapper exchangeServiceWrapper; public MailFinder(ExchangeServiceWrapper exchangeServiceWrapper) { this.exchangeServiceWrapper = exchangeServiceWrapper; } public List<Email> findEmails(long newerThan) { Enumeration<List<EmailMessage>> emails = exchangeServiceWrapper.getEmailsNewerThan(newerThan); List<EmailMessage> messages = new ArrayList<EmailMessage>(); while (emails.hasMoreElements()) { List<EmailMessage> items = emails.nextElement(); messages.addAll(items); } log.debug("{} email newer than {} have been found", messages.size(), newerThan); return transform(messages); } private List<Email> transform(List<EmailMessage> items) { return Lists.transform(items, new Function<EmailMessage, Email>() { @Override public Email apply(EmailMessage message) { return toMail(message); } }); } private List<String> asRecipientsList(Iterator<EmailAddress> emailAddresses) { List<String> recipients = new ArrayList<String>(); while (emailAddresses.hasNext()) { EmailAddress address = emailAddresses.next(); recipients.add(address.getAddress()); } return recipients; } private Email toMail(EmailMessage message) { try { String uniqueId = message.getId().getUniqueId(); //TODO UniqueBody can not be overridden for test String body = message.getUniqueBody() == null ? message.getBody().toString() : message.getUniqueBody().toString(); String sender = message.getSender().getAddress(); Date dateTimeCreated = message.getDateTimeCreated(); List<String> recipients = asRecipientsList(message.getToRecipients().iterator()); return new Email(uniqueId, sender, message.getSubject(), body, dateTimeCreated.getTime(), recipients); } catch (ServiceLocalException e) { throw new ExchangeServiceException("Unable to create mail from item:" + message, e); } } }