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); }
private boolean matches(SearchQuery.ModSeqCriterion criterion, MailboxMessage message) throws UnsupportedSearchException { SearchQuery.NumericOperator operator = criterion.getOperator(); long modSeq = message.getModSeq(); long value = operator.getValue(); switch (operator.getType()) { case LESS_THAN: return modSeq < value; case GREATER_THAN: return modSeq > value; case EQUALS: return modSeq == value; default: throw new UnsupportedSearchException(); } }