This commit is contained in:
@@ -345,7 +345,136 @@ public class FilterNode {
|
|||||||
for (String item : flipper.getSort().split(",")) {
|
for (String item : flipper.getSort().split(",")) {
|
||||||
if (item.trim().isEmpty()) continue;
|
if (item.trim().isEmpty()) continue;
|
||||||
String[] sub = item.trim().split("\\s+");
|
String[] sub = item.trim().split("\\s+");
|
||||||
final Attribute<E, Serializable> attr = info.getAttribute(sub[0]);
|
int pos = sub[0].indexOf('(');
|
||||||
|
Attribute<E, Serializable> attr;
|
||||||
|
if (pos <= 0) {
|
||||||
|
attr = info.getAttribute(sub[0]);
|
||||||
|
} else { //含SQL函数
|
||||||
|
int pos2 = sub[0].lastIndexOf(')');
|
||||||
|
final Attribute<E, Serializable> pattr = info.getAttribute(sub[0].substring(pos + 1, pos2));
|
||||||
|
final String func = sub[0].substring(0, pos);
|
||||||
|
if ("ABS".equalsIgnoreCase(func)) {
|
||||||
|
if (pattr.type() == int.class || pattr.type() == Integer.class) {
|
||||||
|
attr = new Attribute<E, Serializable>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class type() {
|
||||||
|
return pattr.type();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class declaringClass() {
|
||||||
|
return pattr.declaringClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String field() {
|
||||||
|
return pattr.field();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Serializable get(E obj) {
|
||||||
|
return Math.abs(((Number) pattr.get(obj)).intValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(E obj, Serializable value) {
|
||||||
|
pattr.set(obj, value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else if (pattr.type() == long.class || pattr.type() == Long.class) {
|
||||||
|
attr = new Attribute<E, Serializable>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class type() {
|
||||||
|
return pattr.type();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class declaringClass() {
|
||||||
|
return pattr.declaringClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String field() {
|
||||||
|
return pattr.field();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Serializable get(E obj) {
|
||||||
|
return Math.abs(((Number) pattr.get(obj)).longValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(E obj, Serializable value) {
|
||||||
|
pattr.set(obj, value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else if (pattr.type() == float.class || pattr.type() == Float.class) {
|
||||||
|
attr = new Attribute<E, Serializable>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class type() {
|
||||||
|
return pattr.type();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class declaringClass() {
|
||||||
|
return pattr.declaringClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String field() {
|
||||||
|
return pattr.field();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Serializable get(E obj) {
|
||||||
|
return Math.abs(((Number) pattr.get(obj)).floatValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(E obj, Serializable value) {
|
||||||
|
pattr.set(obj, value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else if (pattr.type() == double.class || pattr.type() == Double.class) {
|
||||||
|
attr = new Attribute<E, Serializable>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class type() {
|
||||||
|
return pattr.type();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class declaringClass() {
|
||||||
|
return pattr.declaringClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String field() {
|
||||||
|
return pattr.field();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Serializable get(E obj) {
|
||||||
|
return Math.abs(((Number) pattr.get(obj)).doubleValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(E obj, Serializable value) {
|
||||||
|
pattr.set(obj, value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Flipper not supported sort illegal type by ABS (" + flipper.getSort() + ")");
|
||||||
|
}
|
||||||
|
} else if (func.isEmpty()) {
|
||||||
|
attr = pattr;
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Flipper not supported sort illegal function (" + flipper.getSort() + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
Comparator<E> c = (E o1, E o2) -> {
|
Comparator<E> c = (E o1, E o2) -> {
|
||||||
Comparable c1 = (Comparable) attr.get(o1);
|
Comparable c1 = (Comparable) attr.get(o1);
|
||||||
Comparable c2 = (Comparable) attr.get(o2);
|
Comparable c2 = (Comparable) attr.get(o2);
|
||||||
|
|||||||
Reference in New Issue
Block a user