Skip to content

Commit 0f6e7d1

Browse files
committed
Improved the default filter
1 parent 416f36f commit 0f6e7d1

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/main/java/org/javawebstack/orm/filter/DefaultQueryFilter.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.javawebstack.orm.filter;
22

33
import org.javawebstack.orm.Model;
4+
import org.javawebstack.orm.TableInfo;
45
import org.javawebstack.orm.query.Query;
6+
import org.javawebstack.orm.util.Helper;
57

8+
import java.lang.reflect.Field;
69
import java.util.List;
710
import java.util.Map;
811

@@ -17,8 +20,36 @@ public DefaultQueryFilter(Map<String, String> filterable, List<String> searchabl
1720
}
1821

1922
public void filter(Query<? extends Model> query, Map<String, String> filter) {
23+
TableInfo info = query.getRepo().getInfo();
2024
query.and(q -> {
21-
filter.keySet().stream().filter(filterable.keySet()::contains).forEach(key -> q.where(filterable.get(key), filter.get(key)));
25+
filter.keySet().stream().filter(filterable.keySet()::contains).forEach(key -> {
26+
boolean not = false;
27+
if(key.endsWith("!")) {
28+
key = key.substring(0, key.length()-1);
29+
not = true;
30+
}
31+
key = filterable.get(key);
32+
String v = filter.get(key);
33+
Field field = info.getField(key);
34+
if(field == null) {
35+
key = Helper.toCamelCase(key);
36+
field = info.getField(key);
37+
}
38+
if(field == null)
39+
return;
40+
if(v.equals("null")) {
41+
if(not)
42+
q.whereNull(key);
43+
else
44+
q.whereNotNull(key);
45+
return;
46+
}
47+
if(field.getType().equals(Boolean.class) || field.getType().equals(boolean.class)) {
48+
q.where(key, not ? "!=" : "=", v.equals("1") || v.equals("true"));
49+
return;
50+
}
51+
q.where(key, not ? "!=" : "=", v);
52+
});
2253
return q;
2354
});
2455
}

src/main/java/org/javawebstack/orm/util/Helper.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,23 @@ public static String pascalToCamelCase(String source) {
2121
return Character.toLowerCase(source.charAt(0)) + source.substring(1);
2222
}
2323

24+
public static String toCamelCase(String source) {
25+
if(source == null || source.length() == 0)
26+
return source;
27+
StringBuilder sb = new StringBuilder()
28+
.append(Character.toLowerCase(source.charAt(0)));
29+
boolean wordFlag = false;
30+
for(int i=1; i<source.length(); i++) {
31+
char c = source.charAt(i);
32+
if(c == '-' || c == '_') {
33+
wordFlag = true;
34+
continue;
35+
}
36+
if(Character.isUpperCase(c) && Character.isLowerCase(source.charAt(i-1)))
37+
wordFlag = true;
38+
sb.append(wordFlag ? Character.toUpperCase(c) : Character.toUpperCase(c));
39+
}
40+
return sb.toString();
41+
}
42+
2443
}

0 commit comments

Comments
 (0)