PageSortUtil.java
package com.nashtech.rookie.asset_management_0701.utils;
import java.util.List;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order;
import com.nashtech.rookie.asset_management_0701.constants.DefaultSortOptions;
import com.nashtech.rookie.asset_management_0701.exceptions.AppException;
import com.nashtech.rookie.asset_management_0701.exceptions.ErrorCode;
public final class PageSortUtil {
private PageSortUtil () {
}
public static Pageable createPageRequest (Integer pageNumber, Integer pageSize, Sort sort) {
return PageRequest.of(pageNumber - 1, pageSize > 100 ? 100 : pageSize, sort);
}
public static Pageable createPageRequest (Integer pageNumber, Integer pageSize, String sortBy,
Sort.Direction sortDirection, String defaulSortBy) {
if (pageNumber == null || pageSize == null || sortBy == null) {
throw new AppException(ErrorCode.INVALID_PAGEABLE);
}
try {
if (sortBy.isBlank()){
sortBy = defaulSortBy;
}
Sort sort = Sort.by(sortDirection, sortBy);
if (sortBy.equals("fullName")){
sort = Sort.by(List.of(new Order(sortDirection, "firstName"), new Order(sortDirection, "lastName")));
}
return PageRequest.of(pageNumber, Math.min(pageSize, DefaultSortOptions.MAX_PAGE_SIZE), sort);
}
catch (IllegalArgumentException e) {
throw new AppException(ErrorCode.INVALID_PAGEABLE);
}
}
public static Sort.Direction parseSortDirection (String sortDirection) {
try {
return Sort.Direction.fromString(sortDirection);
}
catch (IllegalArgumentException e) {
throw new AppException(ErrorCode.INVALID_SORT_DIR);
}
}
public static int parsePageValue (String value, int defaultValue) {
try {
int parsedValue = Integer.parseInt(value);
return Math.max(parsedValue, 1);
}
catch (NumberFormatException e) {
return defaultValue;
}
}
}