package org.springframework.data.ebean.convert;

import io.ebean.OrderBy;
import io.ebean.PagedList;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * Ebean PageList and Order convert to or from Spring data Page or Sort.
 *
 * @author Xuegui Yuan
 */
public class PageListOrderConverter {

    /**
     * Convert spring data Sort to Ebean OrderBy.
     *
     * @param sort
     * @param <T>
     * @return
     */
    public static <T> OrderBy<T> convertToEbeanOrder(Sort sort) {
        List<String> list = new ArrayList<>();
        while (sort.iterator().hasNext()) {
            Sort.Order so = sort.iterator().next();
            list.add(so.getDirection() == Sort.Direction.ASC ? so.getProperty() + " asc" : so.getProperty() + " desc");
        }
        return new OrderBy<T>(StringUtils.collectionToCommaDelimitedString(list));
    }

    /**
     * Convert Ebean pagedList Sort to Spring data Page.
     *
     * @param pagedList
     * @param sort
     * @param <T>
     * @return
     */
    public static <T> Page<T> convertToSpringDataPage(PagedList<T> pagedList, Sort sort) {
        return new PageImpl<T>(pagedList.getList(),
                new PageRequest(pagedList.getPageIndex(), pagedList.getPageSize(), sort),
                pagedList.getTotalCount());
    }
}

@@ -40,17 +40,19 @@
 convert;
-%0A
+%0D%0A%0D
 %0Aimport 
@@ -68,16 +68,17 @@
 OrderBy;
+%0D
 %0Aimport 
@@ -92,24 +92,78 @@
 n.PagedList;
+%0D%0Aimport java.util.ArrayList;%0D%0Aimport java.util.List;%0D
 %0Aimport org.
@@ -195,16 +195,17 @@
 in.Page;
+%0D
 %0Aimport 
@@ -245,16 +245,17 @@
 ageImpl;
+%0D
 %0Aimport 
@@ -298,16 +298,17 @@
 Request;
+%0D
 %0Aimport 
@@ -344,16 +344,17 @@
 in.Sort;
+%0D
 %0Aimport 
@@ -394,65 +394,16 @@
 ils;
-%0A%0Aimport java.util.ArrayList;%0Aimport java.util.List;%0A
+%0D%0A%0D
 %0A/**
+%0D
 %0A * 
@@ -471,19 +471,21 @@
 or Sort.
+%0D
 %0A *
+%0D
 %0A * @aut
@@ -503,12 +503,14 @@
 Yuan
+%0D
 %0A */
+%0D
 %0Apub
@@ -543,25 +543,27 @@
 verter %7B
-%0A
+%0D%0A%0D
 %0A    /**
 %0A     * 
@@ -546,32 +546,33 @@
 ter %7B%0D%0A%0D%0A    /**
+%0D
 %0A     * Convert 
@@ -605,23 +605,25 @@
 OrderBy.
+%0D
 %0A     *
+%0D
 %0A     * 
@@ -625,32 +625,33 @@
    * @param sort
+%0D
 %0A     * @param %3C
@@ -644,32 +644,33 @@
     * @param %3CT%3E
+%0D
 %0A     * @return%0A
@@ -664,32 +664,33 @@
    * @return
+%0D
 %0A     */
 %0A    public 
@@ -669,32 +669,33 @@
 @return%0D%0A     */
+%0D
 %0A    public stat
@@ -736,32 +736,99 @@
 der(Sort sort) %7B
+%0D%0A        if (sort == null) %7B%0D%0A            return null;%0D%0A        %7D%0D
 %0A        List%3CSt
@@ -858,16 +858,17 @@
 ist%3C%3E();
+%0D
 %0A       
@@ -903,16 +903,17 @@
 ext()) %7B
+%0D
 %0A       
@@ -956,16 +956,17 @@
 .next();
+%0D
 %0A       
@@ -1077,16 +1077,17 @@
  desc%22);
+%0D
 %0A       
@@ -1088,16 +1088,17 @@
        %7D
+%0D
 %0A       
@@ -1176,23 +1176,26 @@
 t));
+%0D
 %0A    %7D
-%0A
+%0D%0A%0D
 %0A    /**
 %0A   
@@ -1190,16 +1190,17 @@
 %0A    /**
+%0D
 %0A     * 
@@ -1248,23 +1248,25 @@
 ta Page.
+%0D
 %0A     *
+%0D
 %0A     * 
@@ -1281,16 +1281,17 @@
 agedList
+%0D
 %0A     * 
@@ -1301,16 +1301,17 @@
 ram sort
+%0D
 %0A     * 
@@ -1320,16 +1320,17 @@
 aram %3CT%3E
+%0D
 %0A     * 
@@ -1336,24 +1336,25 @@
  @return
+%0D
 %0A     */
 %0A    pub
@@ -1345,16 +1345,17 @@
 %0A     */
+%0D
 %0A    pub
@@ -1437,16 +1437,17 @@
  sort) %7B
+%0D
 %0A       
@@ -1490,16 +1490,17 @@
 tList(),
+%0D
 %0A       
@@ -1581,16 +1581,17 @@
 , sort),
+%0D
 %0A       
@@ -1630,13 +1630,16 @@
 ());
+%0D
 %0A    %7D
+%0D
 %0A%7D
+%0D
 %0A

fix sort bug