private Criterion or(List<SearchKey> keys, final ImapSession session) throws MessageRangeException { final SearchKey keyOne = keys.get(0); final SearchKey keyTwo = keys.get(1); final Criterion criterionOne = toCriterion(keyOne, session); final Criterion criterionTwo = toCriterion(keyTwo, session); final Criterion result = SearchQuery.or(criterionOne, criterionTwo); return result; }
private Criterion or(List<SearchKey> keys, ImapSession session) throws MessageRangeException { final SearchKey keyOne = keys.get(0); final SearchKey keyTwo = keys.get(1); final Criterion criterionOne = toCriterion(keyOne, session); final Criterion criterionTwo = toCriterion(keyTwo, session); return SearchQuery.or(criterionOne, criterionTwo); }
private Criterion convertOperator(FilterOperator filter) { switch (filter.getOperator()) { case AND: return SearchQuery.and(convertCriterias(filter)); case OR: return SearchQuery.or(convertCriterias(filter)); case NOT: return SearchQuery.not(convertCriterias(filter)); } throw new RuntimeException("Unknown operator"); }
private SearchQuery convertCondition(FilterCondition filter) { SearchQuery searchQuery = new SearchQuery(); filter.getText().ifPresent(text -> searchQuery.andCriteria( SearchQuery.or(ImmutableList.of( SearchQuery.address(AddressType.From, text), SearchQuery.address(AddressType.To, text),
@Test public void filterConditionShouldMapWhenOrOperator() { String from = "sender@james.org"; String to = "recipient@james.org"; String subject = "subject"; SearchQuery expectedSearchQuery = new SearchQuery(); expectedSearchQuery.andCriteria(SearchQuery.or(ImmutableList.of( SearchQuery.address(AddressType.From, from), SearchQuery.address(AddressType.To, to), SearchQuery.headerContains("Subject", subject)))); Filter complexFilter = FilterOperator.or( FilterCondition.builder() .from(from) .to(to) .subject(subject) .build()); SearchQuery searchQuery = new FilterToSearchQuery().convert(complexFilter); assertThat(searchQuery).isEqualTo(expectedSearchQuery); }
@Test public void testSENTSINCE() throws Exception { expectsGetSelectedMailbox(); check(SearchKey.buildSentSince(DAY_MONTH_YEAR), SearchQuery.or(SearchQuery.headerDateOn(ImapConstants.RFC822_DATE, getDate(DAY, MONTH, YEAR), DateResolution.Day), SearchQuery .headerDateAfter(ImapConstants.RFC822_DATE, getDate(DAY, MONTH, YEAR), DateResolution.Day))); }
@Test public void testSINCE() throws Exception { expectsGetSelectedMailbox(); check(SearchKey.buildSince(DAY_MONTH_YEAR), SearchQuery.or(SearchQuery .internalDateOn(getDate(DAY, MONTH, YEAR), DateResolution.Day), SearchQuery .internalDateAfter(getDate(DAY, MONTH, YEAR), DateResolution.Day))); }
@Test public void filterConditionShouldMapWhenText() { String text = "text"; SearchQuery expectedSearchQuery = new SearchQuery(); expectedSearchQuery.andCriteria(SearchQuery.or(ImmutableList.of( SearchQuery.address(AddressType.From, text), SearchQuery.address(AddressType.To, text), SearchQuery.address(AddressType.Cc, text), SearchQuery.address(AddressType.Bcc, text), SearchQuery.headerContains("Subject", text), SearchQuery.bodyContains(text), SearchQuery.attachmentContains(text), SearchQuery.attachmentFileName(text)))); SearchQuery searchQuery = new FilterToSearchQuery().convert(FilterCondition.builder() .text(text) .build()); assertThat(searchQuery).isEqualTo(expectedSearchQuery); }
@Test public void testOR() throws Exception { expectsGetSelectedMailbox(); check(SearchKey.buildOr(SearchKey.buildOn(DAY_MONTH_YEAR), SearchKey .buildOld()), SearchQuery.or(SearchQuery.internalDateOn(getDate(DAY, MONTH, YEAR), DateResolution.Day), SearchQuery.flagIsUnSet(Flag.RECENT))); }
@Test public void filterConditionShouldMapWhenComplexFilterTree() { String from = "sender@james.org"; String to = "recipient@james.org"; String cc = "copy@james.org"; SearchQuery expectedSearchQuery = new SearchQuery(); expectedSearchQuery.andCriteria(SearchQuery.and(ImmutableList.of( SearchQuery.address(AddressType.From, from), SearchQuery.or(ImmutableList.of( SearchQuery.not(SearchQuery.address(AddressType.To, to)), SearchQuery.address(AddressType.Cc, cc)) ) ))); Filter complexFilter = FilterOperator.and( FilterCondition.builder() .from(from) .build(), FilterOperator.or( FilterOperator.not( FilterCondition.builder() .to(to) .build()), FilterCondition.builder() .cc(cc) .build() )); SearchQuery searchQuery = new FilterToSearchQuery().convert(complexFilter); assertThat(searchQuery).isEqualTo(expectedSearchQuery); }
return SearchQuery.or(onCrit, afterCrit); case SearchKey.TYPE_SEQUENCE_SET: return sequence(key.getSequenceNumbers(), session); case SearchKey.TYPE_SINCE: return SearchQuery.or(SearchQuery.internalDateOn(date.toDate(), DateResolution.Day), SearchQuery.internalDateAfter(date.toDate(), DateResolution.Day)); case SearchKey.TYPE_SMALLER: return SearchQuery.sizeLessThan(key.getSize()); case SearchKey.TYPE_OLDER: Date withinDate = createWithinDate(key); return SearchQuery.or(SearchQuery.internalDateOn(withinDate, DateResolution.Second), SearchQuery.internalDateBefore(withinDate, DateResolution.Second)); case SearchKey.TYPE_YOUNGER: Date withinDate2 = createWithinDate(key); return SearchQuery.or(SearchQuery.internalDateOn(withinDate2, DateResolution.Second), SearchQuery.internalDateAfter(withinDate2, DateResolution.Second)); case SearchKey.TYPE_MODSEQ: session.setAttribute(SEARCH_MODSEQ, true); long modSeq = key.getModSeq(); return SearchQuery.or(SearchQuery.modSeqEquals(modSeq), SearchQuery.modSeqGreaterThan(modSeq)); default: LOGGER.warn("Ignoring unknown search key {}", type);
return SearchQuery.or(onCrit, afterCrit); case SearchKey.TYPE_SEQUENCE_SET: return sequence(key.getSequenceNumbers(), session, true); case SearchKey.TYPE_SINCE: return SearchQuery.or(SearchQuery.internalDateOn(date.toDate(), DateResolution.Day), SearchQuery.internalDateAfter(date.toDate(), DateResolution.Day)); case SearchKey.TYPE_SMALLER: return SearchQuery.sizeLessThan(key.getSize()); case SearchKey.TYPE_OLDER: Date withinDate = createWithinDate(key); return SearchQuery.or(SearchQuery.internalDateOn(withinDate, DateResolution.Second), SearchQuery.internalDateBefore(withinDate, DateResolution.Second)); case SearchKey.TYPE_YOUNGER: Date withinDate2 = createWithinDate(key); return SearchQuery.or(SearchQuery.internalDateOn(withinDate2, DateResolution.Second), SearchQuery.internalDateAfter(withinDate2, DateResolution.Second)); case SearchKey.TYPE_MODSEQ: session.setAttribute(SEARCH_MODSEQ, true); long modSeq = key.getModSeq(); return SearchQuery.or(SearchQuery.modSeqEquals(modSeq), SearchQuery.modSeqGreaterThan(modSeq)); default: session.getLog().warn("Ignoring unknown search key.");