import com.google.common.base.Splitter;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.StreamSupport;
private static final String DOUBLE_QUOTES = "\"";
- private static final Splitter CRITERIA_SPLITTER = Splitter.on(Pattern.compile("and", Pattern.CASE_INSENSITIVE));
+ private static final Splitter CRITERIA_SPLITTER = Splitter.on(Pattern.compile(" and ", Pattern.CASE_INSENSITIVE)).trimResults().omitEmptyStrings();
private static final Splitter IN_VALUES_SPLITTER = Splitter.on(",").omitEmptyStrings().trimResults();
private static final Pattern PATTERN = Pattern.compile("(\\w+)\\s*([<>]?[=]?)\\s*(.*)", Pattern.CASE_INSENSITIVE);
private static final Pattern PATTERN_HAVING_VALUES = Pattern.compile("(\\w+)\\s+(in)\\s+\\((.*)\\)", Pattern.CASE_INSENSITIVE);
- private FilterParser(){
+ private FilterParser() {
// Only static methods
}
public static List<Criterion> parse(String filter) {
- return StreamSupport.stream(CRITERIA_SPLITTER.split(filter.trim()).spliterator(), false)
- .filter(Objects::nonNull)
- .filter(criterion -> !criterion.isEmpty())
- .map(String::trim)
+ return StreamSupport.stream(CRITERIA_SPLITTER.split(filter).spliterator(), false)
.map(FilterParser::parseCriterion)
.collect(Collectors.toList());
}