@Override public boolean equals(Object o) { return (this == o) || (o instanceof InCondition) && _values.equals(((InCondition) o).getValues()); }
@Override public Boolean visit(InCondition condition, @Nullable Object json) { return condition.getValues().contains(json); }
@Nullable @Override public Boolean visit(InCondition condition, @Nullable String context) { return condition.getValues().contains(context); }
@Override public Boolean visit(EqualCondition right, Void context) { // Example: in("value") subset? "value" return _left.getValues().equals(Sets.newHashSet(right.getValue())); }
@Override protected boolean visit(InCondition right) { // If any value in the "in" condition matches then they are not distinct for (Object value : right.getValues()) { if (!checkAreDistinct(_left, Conditions.equal(value))) { return false; } } return true; } };
@Override public boolean visit(InCondition right) { // The conditions are distinct if the "in" condition contains no values the match the "like" condition. for (Object value : right.getValues()) { if (value instanceof String && _left.matches((String) value)) { return false; } } return true; }
@Override public Boolean visit(ComparisonCondition right, Void context) { // Example: in(10, 20) subset? gt(0) return _left.getValues().stream().allMatch((value) -> ConditionEvaluator.eval(right, value, null)); }
@Override protected boolean visit(InCondition right) { // If any value in the "in" condition matches then they are not distinct for (Object value : right.getValues()) { if (!checkAreDistinct(_left, Conditions.equal(value))) { return false; } } return true; } };
@Override protected boolean visit(ContainsCondition right) { // If any value in the "in" condition matches then they are not distinct for (Object value : _left.getValues()) { if (!checkAreDistinct(right, Conditions.equal(value))) { return false; } } return true; } };
@Override public Boolean visit(ContainsCondition right, Void context) { // Example: in(["car", "truck"], ["car", boat"]) subset? contains("car") return _left.getValues().stream().allMatch((value) -> ConditionEvaluator.eval(right, value, null)); }
@Override public Boolean visit(LikeCondition right, Void context) { // Example: in("car", "truck") subset? like("*c*") return _left.getValues().stream().allMatch((value) -> ConditionEvaluator.eval(right, value, null)); }
@Override public Boolean visit(MapCondition condition, Void context) { // Example: in({"key":"car"},{"key":"truck"}) subset? {..,"key":in("car", "truck")} return _left.getValues().stream().allMatch((value) -> ConditionEvaluator.eval(right, value, null)); } };
@Nullable @Override public Void visit(InCondition condition, @Nullable Void context) { condition.getValues().forEach(v -> Conditions.equal(v).visit(this, null)); return null; }
@Override public Boolean visit(IsCondition right, Void context) { // Example: in("car", "truck") subset? is(string) return right.getState() == State.DEFINED || _left.getValues().stream().allMatch((value) -> ConditionEvaluator.eval(right, value, null)); }
protected static void appendSubCondition(Appendable buf, Condition condition) throws IOException { // The syntax allows a comma-separated list of conditions that are implicitly wrapped in an OrCondition. // If _condition is an InCondition or OrCondition we can print them without the "in(...)" and "or(...)" // wrappers to result in a cleaner string format that the parser can parse back into InCondition/OrCondition. if (condition instanceof InCondition) { Set<Object> values = ((InCondition) condition).getValues(); Joiner.on(',').appendTo(buf, OrderedJson.orderedStrings(values)); } else if (condition instanceof OrCondition) { Collection<Condition> conditions = ((OrCondition) condition).getConditions(); String sep = ""; for (Condition orCondition : conditions) { buf.append(sep); orCondition.appendTo(buf); sep = ","; } } else { condition.appendTo(buf); } } }
_values = Lists.newArrayList(); _values.addAll(((InCondition) condition).getValues());