// Path: summer-core/src/main/java/org/smartx/summer/bean/Pageable.java
// public class Pageable {
// 
//     private Integer page = 0;
// 
//     private Integer size = 10;
// 
//     private List<Sort> sorts;
// 
//     public Pageable() {
//     }
// 
//     public Pageable(Integer page, Integer size) {
//         this.page = page;
//         this.size = size;
//     }
// 
//     public Pageable(Integer page, Integer size, List<Sort> sorts) {
//         this.page = page;
//         this.size = size;
//         this.sorts = sorts;
//     }
// 
//     public Integer getPage() {
//         return page;
//     }
// 
//     public void setPage(Integer page) {
//         this.page = page;
//     }
// 
//     public Integer getSize() {
//         return size;
//     }
// 
//     public Integer getOffset() {
//         return page * size;
//     }
// 
//     public void setSize(Integer size) {
//         this.size = size;
//     }
// 
//     public List<Sort> getSorts() {
//         return sorts;
//     }
// 
//     public void setSorts(List<Sort> sorts) {
//         this.sorts = sorts;
//     }
// 
//     public static class Sort {
// 
//         private String name;
// 
//         private Direction direction;
// 
//         public Sort(String name, Direction direction) {
//             this.name = name;
//             this.direction = direction;
//         }
// 
//         public String getName() {
//             return name;
//         }
// 
//         public void setName(String name) {
//             this.name = name;
//         }
// 
//         public Direction getDirection() {
//             return direction;
//         }
// 
//         public void setDirection(Direction direction) {
//             this.direction = direction;
//         }
//     }
// 
//     public enum Direction {
// 
//         // 顺序
//         ASC,
//         // 倒序
//         DESC;
// 
//         /**
//          * Returns the {@link Direction} enum for the given {@link String} value.
//          *
//          * @throws IllegalArgumentException in case the given value cannot be parsed into an enum
//          *                                  value.
//          */
//         public static Direction fromString(String value) {
// 
//             try {
//                 return Direction.valueOf(value.toUpperCase(Locale.US));
//             } catch (Exception e) {
//                 throw new IllegalArgumentException(String.format(
//                         "Invalid value '%s' for orders given! Has to be either 'desc' or 'asc' (case insensitive).", value), e);
//             }
//         }
// 
//         /**
//          * Returns the {@link Direction} enum for the given {@link String} or null if it cannot be
//          * parsed into an enum value.
//          */
//         public static Direction fromStringOrNull(String value) {
//             try {
//                 return fromString(value);
//             } catch (IllegalArgumentException e) {
//                 return null;
//             }
//         }
// 
//         public static Direction fromStringDefaultAsc(String value) {
//             try {
//                 return fromString(value);
//             } catch (IllegalArgumentException e) {
//                 return Direction.ASC;
//             }
//         }
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder();
//         if (this.getSorts() != null) {
//             this.getSorts().forEach(x -> {
//                 sb.append("name=").append(x.getName()).append(",order=").append(x.getDirection().name()).append(";");
//             });
//         }
//         sb.append("page=").append(this.getPage()).append(",").append("size=").append(this.getSize());
//         return sb.toString();
//     }
// }


import org.apache.commons.lang3.StringUtils;
import org.smartx.summer.bean.Pageable;
import org.springframework.format.Formatter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.text.ParseException;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.stream.Stream;
            return null;
        }
        return doConvert(s);
    }

    private static Pageable doConvert(String s) {
        LinkedMultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
        Stream.of(s.split(";")).filter(StringUtils::isNoneBlank).forEach(x -> {
            String[] var = x.split(",");
            Stream.of(var).filter(StringUtils::isNoneBlank).forEach(y -> {
                String[] var1 = y.split("=");
                if (var1.length < LENGTH) {
                    return;
                }
                multiValueMap.add(var1[0].trim(), var1[1].trim());
            });
        });
        Integer page = StringUtils.isBlank(multiValueMap.getFirst("page")) ? 0 : Integer.valueOf(multiValueMap.getFirst("page"));
        Integer size = StringUtils.isBlank(multiValueMap.getFirst("size")) ? 10 : Integer.valueOf(multiValueMap.getFirst("size"));
        Pageable pageable = new Pageable(page, size);
        pageable.setSorts(doConvertSort(multiValueMap));
        return pageable;
    }

    private static List<Pageable.Sort> doConvertSort(MultiValueMap<String, String> multiValueMap) {
        List<String> sorts = multiValueMap.get("sort");
        List<Pageable.Sort> sortList = new LinkedList<>();
        if (null == sorts) {
            return null;
        } else if (1 == sorts.size()) {
// Path: summer-core/src/main/java/org/smartx/summer/bean/Pageable.java
// public class Pageable {
// 
//     private Integer page = 0;
// 
//     private Integer size = 10;
// 
//     private List<Sort> sorts;
// 
//     public Pageable() {
//     }
// 
//     public Pageable(Integer page, Integer size) {
//         this.page = page;
//         this.size = size;
//     }
// 
//     public Pageable(Integer page, Integer size, List<Sort> sorts) {
//         this.page = page;
//         this.size = size;
//         this.sorts = sorts;
//     }
// 
//     public Integer getPage() {
//         return page;
//     }
// 
//     public void setPage(Integer page) {
//         this.page = page;
//     }
// 
//     public Integer getSize() {
//         return size;
//     }
// 
//     public Integer getOffset() {
//         return page * size;
//     }
// 
//     public void setSize(Integer size) {
//         this.size = size;
//     }
// 
//     public List<Sort> getSorts() {
//         return sorts;
//     }
// 
//     public void setSorts(List<Sort> sorts) {
//         this.sorts = sorts;
//     }
// 
//     public static class Sort {
// 
//         private String name;
// 
//         private Direction direction;
// 
//         public Sort(String name, Direction direction) {
//             this.name = name;
//             this.direction = direction;
//         }
// 
//         public String getName() {
//             return name;
//         }
// 
//         public void setName(String name) {
//             this.name = name;
//         }
// 
//         public Direction getDirection() {
//             return direction;
//         }
// 
//         public void setDirection(Direction direction) {
//             this.direction = direction;
//         }
//     }
// 
//     public enum Direction {
// 
//         // 顺序
//         ASC,
//         // 倒序
//         DESC;
// 
//         /**
//          * Returns the {@link Direction} enum for the given {@link String} value.
//          *
//          * @throws IllegalArgumentException in case the given value cannot be parsed into an enum
//          *                                  value.
//          */
//         public static Direction fromString(String value) {
// 
//             try {
//                 return Direction.valueOf(value.toUpperCase(Locale.US));
//             } catch (Exception e) {
//                 throw new IllegalArgumentException(String.format(
//                         "Invalid value '%s' for orders given! Has to be either 'desc' or 'asc' (case insensitive).", value), e);
//             }
//         }
// 
//         /**
//          * Returns the {@link Direction} enum for the given {@link String} or null if it cannot be
//          * parsed into an enum value.
//          */
//         public static Direction fromStringOrNull(String value) {
//             try {
//                 return fromString(value);
//             } catch (IllegalArgumentException e) {
//                 return null;
//             }
//         }
// 
//         public static Direction fromStringDefaultAsc(String value) {
//             try {
//                 return fromString(value);
//             } catch (IllegalArgumentException e) {
//                 return Direction.ASC;
//             }
//         }
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder();
//         if (this.getSorts() != null) {
//             this.getSorts().forEach(x -> {
//                 sb.append("name=").append(x.getName()).append(",order=").append(x.getDirection().name()).append(";");
//             });
//         }
//         sb.append("page=").append(this.getPage()).append(",").append("size=").append(this.getSize());
//         return sb.toString();
//     }
// }


// Path: summer-core/src/main/java/org/smartx/summer/formatter/DefaultRangeHeaderFormatter.java
import org.apache.commons.lang3.StringUtils;
import org.smartx.summer.bean.Pageable;
import org.springframework.format.Formatter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.text.ParseException;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.stream.Stream;

            return null;
        }
        return doConvert(s);
    }

    private static Pageable doConvert(String s) {
        LinkedMultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
        Stream.of(s.split(";")).filter(StringUtils::isNoneBlank).forEach(x -> {
            String[] var = x.split(",");
            Stream.of(var).filter(StringUtils::isNoneBlank).forEach(y -> {
                String[] var1 = y.split("=");
                if (var1.length < LENGTH) {
                    return;
                }
                multiValueMap.add(var1[0].trim(), var1[1].trim());
            });
        });
        Integer page = StringUtils.isBlank(multiValueMap.getFirst("page")) ? 0 : Integer.valueOf(multiValueMap.getFirst("page"));
        Integer size = StringUtils.isBlank(multiValueMap.getFirst("size")) ? 10 : Integer.valueOf(multiValueMap.getFirst("size"));
        Pageable pageable = new Pageable(page, size);
        pageable.setSorts(doConvertSort(multiValueMap));
        return pageable;
    }

    private static List<Pageable.Sort> doConvertSort(MultiValueMap<String, String> multiValueMap) {
        List<String> sorts = multiValueMap.get("sort");
        List<Pageable.Sort> sortList = new LinkedList<>();
        if (null == sorts) {
            return null;
        } else if (1 == sorts.size()) {
            Pageable.Sort sort = new Pageable.Sort(sorts.get(0), Pageable.Direction.fromStringDefaultAsc(multiValueMap.getFirst("order")));