private void registerCriterionConverters() { registerCriterionConverter(SearchQuery.FlagCriterion.class, this::convertFlag); registerCriterionConverter(SearchQuery.UidCriterion.class, this::convertUid); registerCriterionConverter(SearchQuery.ConjunctionCriterion.class, this::convertConjunction); registerCriterionConverter(SearchQuery.HeaderCriterion.class, this::convertHeader); registerCriterionConverter(SearchQuery.TextCriterion.class, this::convertTextCriterion); registerCriterionConverter(SearchQuery.CustomFlagCriterion.class, this::convertCustomFlagCriterion); registerCriterionConverter(SearchQuery.AllCriterion.class, criterion -> matchAllQuery()); registerCriterionConverter(SearchQuery.ModSeqCriterion.class, criterion -> createNumericFilter(JsonMessageConstants.MODSEQ, criterion.getOperator())); registerCriterionConverter(SearchQuery.SizeCriterion.class, criterion -> createNumericFilter(JsonMessageConstants.SIZE, criterion.getOperator())); registerCriterionConverter(SearchQuery.InternalDateCriterion.class, criterion -> dateRangeFilter(JsonMessageConstants.DATE, criterion.getOperator())); registerCriterionConverter(SearchQuery.AttachmentCriterion.class, this::convertAttachmentCriterion); registerCriterionConverter(SearchQuery.MimeMessageIDCriterion.class, this::convertMimeMessageIDCriterion); }
/** * Creates a filter for message size equal to the given value * * @param value * messages with size equal to this value will be selected by the * returned criterion * @return <code>Criterion</code>, not null */ public static Criterion sizeEquals(long value) { return new SizeCriterion(new NumericOperator(value, NumericComparator.EQUALS)); }
private boolean matches(SearchQuery.SizeCriterion criterion, MailboxMessage message) throws UnsupportedSearchException { SearchQuery.NumericOperator operator = criterion.getOperator(); long size = message.getFullContentOctets(); long value = operator.getValue(); switch (operator.getType()) { case LESS_THAN: return size < value; case GREATER_THAN: return size > value; case EQUALS: return size == value; default: throw new UnsupportedSearchException(); } }
/** * Creates a filter for message size greater than the given value * * @param value * messages with size greater than this value will be selected by * the returned criterion * @return <code>Criterion</code>, not null */ public static Criterion sizeGreaterThan(long value) { return new SizeCriterion(new NumericOperator(value, NumericComparator.GREATER_THAN)); }
/** * Creates a filter for message size less than the given value * * @param value * messages with size less than this value will be selected by * the returned criterion * @return <code>Criterion</code>, not null */ public static Criterion sizeLessThan(long value) { return new SizeCriterion(new NumericOperator(value, NumericComparator.LESS_THAN)); }