use of microsoft.exchange.webservices.data.core.service.folder.Folder in project nifi by apache.
the class ConsumeEWS method fillMessageQueueIfNecessary.
/**
* Fills the internal message queue if such queue is empty. This is due to
* the fact that per single session there may be multiple messages retrieved
* from the email server (see FETCH_SIZE).
*/
protected void fillMessageQueueIfNecessary(ProcessContext context) throws ProcessException {
if (this.messageQueue.isEmpty()) {
ExchangeService service = this.initializeIfNecessary(context);
boolean deleteOnRead = context.getProperty(SHOULD_DELETE_MESSAGES).getValue().equals("true");
boolean markAsRead = context.getProperty(SHOULD_MARK_READ).getValue().equals("true");
String includeHeaders = context.getProperty(INCLUDE_EMAIL_HEADERS).getValue();
String excludeHeaders = context.getProperty(EXCLUDE_EMAIL_HEADERS).getValue();
List<String> includeHeadersList = null;
List<String> excludeHeadersList = null;
if (!StringUtils.isEmpty(includeHeaders)) {
includeHeadersList = Arrays.asList(includeHeaders.split(","));
}
if (!StringUtils.isEmpty(excludeHeaders)) {
excludeHeadersList = Arrays.asList(excludeHeaders.split(","));
}
try {
// Get Folder
Folder folder = getFolder(service);
ItemView view = new ItemView(messageQueue.remainingCapacity());
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
FindItemsResults<Item> findResults = service.findItems(folder.getId(), sf, view);
if (findResults == null || findResults.getItems().size() == 0) {
return;
}
service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);
for (Item item : findResults) {
EmailMessage ewsMessage = (EmailMessage) item;
messageQueue.add(parseMessage(ewsMessage, includeHeadersList, excludeHeadersList));
if (deleteOnRead) {
ewsMessage.delete(DeleteMode.HardDelete);
} else if (markAsRead) {
ewsMessage.setIsRead(true);
ewsMessage.update(ConflictResolutionMode.AlwaysOverwrite);
}
}
service.close();
} catch (Exception e) {
throw new ProcessException("Failed retrieving new messages from EWS.", e);
}
}
}
use of microsoft.exchange.webservices.data.core.service.folder.Folder in project nifi by apache.
the class ConsumeEWS method getFolder.
protected Folder getFolder(ExchangeService service) {
Folder folder;
if (folderName.equals("INBOX")) {
try {
folder = Folder.bind(service, WellKnownFolderName.Inbox);
} catch (Exception e) {
throw new ProcessException("Failed to bind Inbox Folder on EWS Server", e);
}
} else {
FolderView view = new FolderView(10);
view.setTraversal(FolderTraversal.Deep);
SearchFilter searchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, folderName);
try {
FindFoldersResults foldersResults = service.findFolders(WellKnownFolderName.Root, searchFilter, view);
ArrayList<Folder> folderIds = foldersResults.getFolders();
if (folderIds.size() > 1) {
throw new ProcessException("More than 1 folder found with the name " + folderName);
}
folder = Folder.bind(service, folderIds.get(0).getId());
} catch (Exception e) {
throw new ProcessException("Search for Inbox Subfolder failed.", e);
}
}
return folder;
}
Aggregations