11package org .javawebstack .orm .filter ;
22
33import org .javawebstack .orm .Model ;
4+ import org .javawebstack .orm .TableInfo ;
45import org .javawebstack .orm .query .Query ;
6+ import org .javawebstack .orm .util .Helper ;
57
8+ import java .lang .reflect .Field ;
69import java .util .List ;
710import 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 }
0 commit comments