This commit is contained in:
@@ -119,55 +119,46 @@ public class FilterNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private <T> Predicate<T> createFilterPredicate(final Attribute<T, ?> attr) {
|
private <T> Predicate<T> createFilterPredicate(final Attribute<T, ?> attr) {
|
||||||
Predicate<T> filter = null;
|
|
||||||
if (attr == null) return null;
|
if (attr == null) return null;
|
||||||
if (value == null && express != ISNULL && express != ISNOTNULL) return null;
|
if (value == null && express != ISNULL && express != ISNOTNULL) return null;
|
||||||
switch (express) {
|
switch (express) {
|
||||||
case EQUAL:
|
case EQUAL: return (T t) -> value.equals(attr.get(t));
|
||||||
filter = (T t) -> value.equals(attr.get(t));
|
case NOTEQUAL: return (T t) -> !value.equals(attr.get(t));
|
||||||
break;
|
case GREATERTHAN: return (T t) -> ((Number) attr.get(t)).longValue() > ((Number) value).longValue();
|
||||||
case NOTEQUAL:
|
case LESSTHAN: return (T t) -> ((Number) attr.get(t)).longValue() < ((Number) value).longValue();
|
||||||
filter = (T t) -> !value.equals(attr.get(t));
|
case GREATERTHANOREQUALTO: return (T t) -> ((Number) attr.get(t)).longValue() >= ((Number) value).longValue();
|
||||||
break;
|
case LESSTHANOREQUALTO: return (T t) -> ((Number) attr.get(t)).longValue() <= ((Number) value).longValue();
|
||||||
|
case ISNULL: return (T t) -> attr.get(t) == null;
|
||||||
|
case ISNOTNULL: return (T t) -> attr.get(t) != null;
|
||||||
|
case OPAND: return (T t) -> (((Number) attr.get(t)).longValue() & ((Number) value).longValue()) > 0;
|
||||||
|
case OPOR: return (T t) -> (((Number) attr.get(t)).longValue() | ((Number) value).longValue()) > 0;
|
||||||
|
case OPANDNO: return (T t) -> (((Number) attr.get(t)).longValue() & ((Number) value).longValue()) == 0;
|
||||||
case LIKE:
|
case LIKE:
|
||||||
filter = (T t) -> {
|
return (T t) -> {
|
||||||
Object rs = attr.get(t);
|
Object rs = attr.get(t);
|
||||||
return rs != null && rs.toString().contains(value.toString());
|
return rs != null && rs.toString().contains(value.toString());
|
||||||
};
|
};
|
||||||
break;
|
|
||||||
case NOTLIKE:
|
case NOTLIKE:
|
||||||
filter = (T t) -> {
|
return (T t) -> {
|
||||||
Object rs = attr.get(t);
|
Object rs = attr.get(t);
|
||||||
return rs == null || !rs.toString().contains(value.toString());
|
return rs == null || !rs.toString().contains(value.toString());
|
||||||
};
|
};
|
||||||
break;
|
|
||||||
case GREATERTHAN:
|
|
||||||
filter = (T t) -> ((Number) attr.get(t)).longValue() > ((Number) value).longValue();
|
|
||||||
break;
|
|
||||||
case LESSTHAN:
|
|
||||||
filter = (T t) -> ((Number) attr.get(t)).longValue() < ((Number) value).longValue();
|
|
||||||
break;
|
|
||||||
case GREATERTHANOREQUALTO:
|
|
||||||
filter = (T t) -> ((Number) attr.get(t)).longValue() >= ((Number) value).longValue();
|
|
||||||
break;
|
|
||||||
case LESSTHANOREQUALTO:
|
|
||||||
filter = (T t) -> ((Number) attr.get(t)).longValue() <= ((Number) value).longValue();
|
|
||||||
break;
|
|
||||||
case BETWEEN:
|
case BETWEEN:
|
||||||
case NOTBETWEEN:
|
case NOTBETWEEN:
|
||||||
Range range = (Range) value;
|
Range range = (Range) value;
|
||||||
final Comparable min = range.getMin();
|
final Comparable min = range.getMin();
|
||||||
final Comparable max = range.getMax();
|
final Comparable max = range.getMax();
|
||||||
filter = (T t) -> {
|
Predicate<T> p = (T t) -> {
|
||||||
Comparable rs = (Comparable) attr.get(t);
|
Comparable rs = (Comparable) attr.get(t);
|
||||||
if (rs == null) return false;
|
if (rs == null) return false;
|
||||||
if (min != null && min.compareTo(rs) >= 0) return false;
|
if (min != null && min.compareTo(rs) >= 0) return false;
|
||||||
return !(max != null && max.compareTo(rs) <= 0);
|
return !(max != null && max.compareTo(rs) <= 0);
|
||||||
};
|
};
|
||||||
if (express == NOTBETWEEN) filter = filter.negate();
|
if (express == NOTBETWEEN) p = p.negate();
|
||||||
break;
|
return p;
|
||||||
case IN:
|
case IN:
|
||||||
case NOTIN:
|
case NOTIN:
|
||||||
|
Predicate<T> filter;
|
||||||
if (value instanceof Collection) {
|
if (value instanceof Collection) {
|
||||||
filter = (T t) -> {
|
filter = (T t) -> {
|
||||||
Object rs = attr.get(t);
|
Object rs = attr.get(t);
|
||||||
@@ -213,24 +204,9 @@ public class FilterNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (express == NOTIN) filter = filter.negate();
|
if (express == NOTIN) filter = filter.negate();
|
||||||
break;
|
return filter;
|
||||||
case ISNULL:
|
|
||||||
filter = (T t) -> attr.get(t) == null;
|
|
||||||
break;
|
|
||||||
case ISNOTNULL:
|
|
||||||
filter = (T t) -> attr.get(t) != null;
|
|
||||||
break;
|
|
||||||
case OPAND:
|
|
||||||
filter = (T t) -> (((Number) attr.get(t)).longValue() & ((Number) value).longValue()) > 0;
|
|
||||||
break;
|
|
||||||
case OPOR:
|
|
||||||
filter = (T t) -> (((Number) attr.get(t)).longValue() | ((Number) value).longValue()) > 0;
|
|
||||||
break;
|
|
||||||
case OPANDNO:
|
|
||||||
filter = (T t) -> (((Number) attr.get(t)).longValue() & ((Number) value).longValue()) == 0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return filter;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String formatValue() {
|
private String formatValue() {
|
||||||
|
|||||||
Reference in New Issue
Block a user