1 package net.avcompris.commons3.dao; 2 3 import static java.util.Locale.ENGLISH; 4 import static org.apache.commons.lang3.StringUtils.substringAfter; 5 import static org.apache.commons.lang3.StringUtils.substringBetween; 6 7 import javax.annotation.Nullable; 8 9 import net.avcompris.commons.query.Filtering; 10 11 public interface EntitiesDtoQuery<T extends Filtering<U>, U extends Filtering.Field> { 12 13 @Nullable 14 T getFiltering(); 15 16 SortBy[] getSortBys(); 17 18 Expand[] getExpands(); 19 20 int getStart(); 21 22 int getLimit(); 23 24 EntitiesDtoQuery<T, U> setFiltering(@Nullable T filtering); 25 26 EntitiesDtoQuery<T, U> setStart(int start); 27 28 EntitiesDtoQuery<T, U> setLimit(int limit); 29 30 interface SortBy { 31 32 String name(); 33 34 String toSqlField(); 35 36 boolean isDesc(); 37 38 static String toSqlField(final String name) { 39 40 return name.endsWith("_DESC") 41 42 ? substringBetween(name, "SORT_BY_", "_DESC").toLowerCase(ENGLISH) 43 44 : substringAfter(name, "SORT_BY_").toLowerCase(ENGLISH); 45 } 46 47 static boolean isDesc(final String name) { 48 49 return name.endsWith("_DESC"); 50 } 51 } 52 53 interface Expand { 54 55 String name(); 56 } 57 }