44import app .common .search .PageSearchResult ;
55import app .common .search .SearchRequest ;
66import com .fasterxml .jackson .databind .ObjectMapper ;
7+ import com .querydsl .core .types .Order ;
8+ import com .querydsl .core .types .OrderSpecifier ;
9+ import com .querydsl .core .types .Path ;
710import org .apache .commons .lang3 .StringUtils ;
811import org .slf4j .Logger ;
912import org .slf4j .LoggerFactory ;
1013import org .springframework .data .domain .*;
1114
1215import java .io .IOException ;
16+ import java .util .HashMap ;
1317import java .util .List ;
18+ import java .util .Map ;
1419
1520public class SearchUtils {
1621
@@ -34,7 +39,7 @@ public static <T extends BaseSearchCriteria> T createSearchCriteria(SearchReques
3439 : "{}" ;
3540
3641 // Create search criteria object based on given stringified JSON
37- T searchCriteria = parseJson (searchCriteriaString , searchCriteriaClass );
42+ T searchCriteria = JsonUtils . parse (searchCriteriaString , searchCriteriaClass );
3843
3944 // Zero indexed page
4045 searchCriteria .setPageIndex (searchRequest .getPageIndex () - 1 );
@@ -65,16 +70,26 @@ public static <T> Page<T> pageOf(SearchRequest searchRequest, PageSearchResult<T
6570 return new PageImpl <>(data , pageable , totalRows );
6671 }
6772
68- private static <T > T parseJson (String jsonSearchCriteriaString , Class <T > searchCriteriaClass ) {
69- T searchCriteria = null ;
73+ public static OrderSpecifier <?> orderSpecifierOf (BaseSearchCriteria criteria , HashMap <String , Path > orderMap , String defaultOrderBy ) {
74+ // Specify order direction
75+ Order orderDirection = (criteria .getOrderAsc () == null ) || (criteria .getOrderAsc ().equals (Boolean .TRUE ))
76+ ? Order .ASC
77+ : Order .DESC ;
7078
71- try {
72- searchCriteria = MAPPER .readValue (jsonSearchCriteriaString , searchCriteriaClass );
73- } catch (IOException e ) {
74- LOG .info ("Something went wrong while parsing stringified JSON" , e );
79+ // Specify order field name
80+ if (StringUtils .isBlank (criteria .getOrderBy ()) && criteria .getOrderBy () == null ) {
81+ criteria .setOrderBy (defaultOrderBy );
7582 }
7683
77- return searchCriteria ;
84+ // Specify order field path
85+ Path orderPath = null ;
86+ for (Map .Entry entry : orderMap .entrySet ()) {
87+ if (entry .getKey ().equals (criteria .getOrderBy ())) {
88+ orderPath = (Path ) entry .getValue ();
89+ }
90+ }
91+
92+ return new OrderSpecifier (orderDirection , orderPath );
7893 }
7994
8095}
0 commit comments