private Criterion and(List<SearchKey> keys, final ImapSession session) throws MessageRangeException { final int size = keys.size(); final List<Criterion> criteria = new ArrayList<Criterion>(size); for (final SearchKey key : keys) { final Criterion criterion = toCriterion(key, session); criteria.add(criterion); } final Criterion result = SearchQuery.and(criteria); return result; }
@Test public void filterConditionShouldMapTwoConditions() { String from = "sender@james.org"; String to = "recipient@james.org"; SearchQuery expectedSearchQuery = new SearchQuery(); expectedSearchQuery.andCriteria(SearchQuery.and(ImmutableList.of( SearchQuery.address(AddressType.From, from), SearchQuery.address(AddressType.To, to)))); Filter filter = FilterOperator.and( FilterCondition.builder() .from(from) .build(), FilterCondition.builder() .to(to) .build()); SearchQuery searchQuery = new FilterToSearchQuery().convert(filter); assertThat(searchQuery).isEqualTo(expectedSearchQuery); }
@Test public void filterConditionShouldMapWhenAndOperator() { String from = "sender@james.org"; String to = "recipient@james.org"; String subject = "subject"; SearchQuery expectedSearchQuery = new SearchQuery(); expectedSearchQuery.andCriteria(SearchQuery.and(ImmutableList.of( SearchQuery.address(AddressType.From, from), SearchQuery.address(AddressType.To, to), SearchQuery.headerContains("Subject", subject)))); Filter complexFilter = FilterOperator.and( FilterCondition.builder() .from(from) .to(to) .subject(subject) .build()); SearchQuery searchQuery = new FilterToSearchQuery().convert(complexFilter); assertThat(searchQuery).isEqualTo(expectedSearchQuery); }
private Criterion and(List<SearchKey> keys, ImapSession session) throws MessageRangeException { final int size = keys.size(); final List<Criterion> criteria = new ArrayList<>(size); for (SearchKey key : keys) { final Criterion criterion = toCriterion(key, session); criteria.add(criterion); } return SearchQuery.and(criteria); }
@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); }
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"); }
@Test public void testAND() throws Exception { expectsGetSelectedMailbox(); List<SearchKey> keys = new ArrayList<>(); keys.add(SearchKey.buildOn(DAY_MONTH_YEAR)); keys.add(SearchKey.buildOld()); keys.add(SearchKey.buildLarger(SIZE)); List<Criterion> criteria = new ArrayList<>(); criteria.add(SearchQuery.internalDateOn(getDate(DAY, MONTH, YEAR), DateResolution.Day)); criteria.add(SearchQuery.flagIsUnSet(Flag.RECENT)); criteria.add(SearchQuery.sizeGreaterThan(SIZE)); check(SearchKey.buildAnd(keys), SearchQuery.and(criteria)); }
@Test public void testNEW() throws Exception { expectsGetSelectedMailbox(); check(SearchKey.buildNew(), SearchQuery.and(SearchQuery .flagIsSet(Flag.RECENT), SearchQuery.flagIsUnSet(Flag.SEEN))); }
return SearchQuery.sizeGreaterThan(key.getSize()); case SearchKey.TYPE_NEW: return SearchQuery.and(SearchQuery.flagIsSet(Flag.RECENT), SearchQuery.flagIsUnSet(Flag.SEEN)); case SearchKey.TYPE_NOT: return not(key.getKeys(), session);
return SearchQuery.sizeGreaterThan(key.getSize()); case SearchKey.TYPE_NEW: return SearchQuery.and(SearchQuery.flagIsSet(Flag.RECENT), SearchQuery.flagIsUnSet(Flag.SEEN)); case SearchKey.TYPE_NOT: return not(key.getKeys(), session);