class PropertyValuesPredicateEvaluator implements PredicateEvaluator {

    protected Predicate buildPredicate(final Predicate predicate) {
        if (PREDICATE_BUILT_VALUE.equals(predicate.get(PREDICATE_BUILT_KEY))) {
            return predicate;
        }

        final List<String> delimiters = getDelimiters(predicate);
        final List<String> values = new ArrayList<>();

        PredicateEvaluatorUtil.getValues(predicate, VALUES, true)
                .forEach(value -> values.addAll(getValues(value, delimiters)));

        if (isFulltextOperation(predicate)) {
            buildFulltextPredicate(predicate, values, predicate.get(JcrPropertyPredicateEvaluator.PROPERTY));
        } else {
            buildPropertyPredicate(predicate, values);
        }

        predicate.set(PREDICATE_BUILT_KEY, PREDICATE_BUILT_VALUE);

        return predicate;
    }

}