private QueryBuilder convertFlag(SearchQuery.FlagCriterion flagCriterion) { SearchQuery.BooleanOperator operator = flagCriterion.getOperator(); Flags.Flag flag = flagCriterion.getFlag(); if (flag.equals(Flags.Flag.DELETED)) { return boolQuery().filter(termQuery(JsonMessageConstants.IS_DELETED, operator.isSet())); } if (flag.equals(Flags.Flag.ANSWERED)) { return boolQuery().filter(termQuery(JsonMessageConstants.IS_ANSWERED, operator.isSet())); } if (flag.equals(Flags.Flag.DRAFT)) { return boolQuery().filter(termQuery(JsonMessageConstants.IS_DRAFT, operator.isSet())); } if (flag.equals(Flags.Flag.SEEN)) { return boolQuery().filter(termQuery(JsonMessageConstants.IS_UNREAD, !operator.isSet())); } if (flag.equals(Flags.Flag.RECENT)) { return boolQuery().filter(termQuery(JsonMessageConstants.IS_RECENT, operator.isSet())); } if (flag.equals(Flags.Flag.FLAGGED)) { return boolQuery().filter(termQuery(JsonMessageConstants.IS_FLAGGED, operator.isSet())); } throw new RuntimeException("Unknown flag used in Flag search criterion"); }
private boolean matches(SearchQuery.FlagCriterion criterion, MailboxMessage message, Collection<MessageUid> recentMessageUids) { SearchQuery.BooleanOperator operator = criterion.getOperator(); boolean isSet = operator.isSet(); Flags.Flag flag = criterion.getFlag(); if (flag == Flags.Flag.ANSWERED) { return isSet == message.isAnswered(); } else if (flag == Flags.Flag.SEEN) { return isSet == message.isSeen(); } else if (flag == Flags.Flag.DRAFT) { return isSet == message.isDraft(); } else if (flag == Flags.Flag.FLAGGED) { return isSet == message.isFlagged(); } else if (flag == Flags.Flag.RECENT) { final MessageUid uid = message.getUid(); return isSet == recentMessageUids.contains(uid); } else if (flag == Flags.Flag.DELETED) { return isSet == message.isDeleted(); } else { return false; } }