Example usage for org.springframework.data.domain Sort spliterator

List of usage examples for org.springframework.data.domain Sort spliterator

Introduction

In this page you can find the example usage for org.springframework.data.domain Sort spliterator.

Prototype

default Spliterator<T> spliterator() 

Source Link

Document

Creates a Spliterator over the elements described by this Iterable .

Usage

From source file:cn.edu.zjnu.acm.judge.mapper.BestSubmissionsBuilder.java

public static String bestSubmissions(@Param("problemId") long problemId, @Param("pageable") Pageable pageable) {
    Set<String> dejaVu = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
    Sort sort = Optional.ofNullable(pageable.getSort()).map(s -> s.and(DEFAULT_SORT)).orElse(DEFAULT_SORT);
    Sort.Order[] orders = StreamSupport.stream(sort.spliterator(), false)
            .filter(order -> ALLOW_COLUMNS.contains(order.getProperty()) && dejaVu.add(order.getProperty()))
            .toArray(Sort.Order[]::new);
    final int length = orders.length;
    log.debug("{}", Arrays.asList(orders));

    StringBuilder sb = new StringBuilder(
            "select " + SubmissionMapper.LIST_COLUMNS + " from solution s where problem_id=").append(problemId)
                    .append(" and score=100 ");
    for (int i = length - 1; i >= 0; --i) {
        sb.append("and(user_id");
        for (int j = 0; j <= i; ++j) {
            sb.append(',').append(orders[j].getProperty());
        }/*from  w ww.  j  av a  2  s . com*/
        sb.append(")in(select user_id");
        for (int j = 0; j < i; ++j) {
            sb.append(',').append(orders[j].getProperty());
        }
        sb.append(',').append(orders[i].isAscending() ? "min" : "max").append("(")
                .append(orders[i].getProperty()).append(")").append(orders[i].getProperty())
                .append(" from solution where problem_id=").append(problemId).append(" and score=100 ");
    }
    for (int i = 0; i < length; ++i) {
        sb.append("group by user_id)");
    }
    if (length > 0) {
        sb.append(" order by ");
        for (int i = 0; i < length; ++i) {
            if (i > 0) {
                sb.append(",");
            }
            sb.append(orders[i].getProperty());
            if (!orders[i].isAscending()) {
                sb.append(" desc");
            }
        }
    }
    return sb.append(" limit ").append(pageable.getOffset()).append(",").append(pageable.getPageSize())
            .toString();
}

From source file:com.epam.ta.reportportal.ws.resolver.SortArgumentResolver.java

@Override
public Sort resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
        NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {

    /*/* w w w. java 2 s .co  m*/
       * Resolve sort argument in default way
     */
    Sort defaultSort = super.resolveArgument(parameter, mavContainer, webRequest, binderFactory);

    /*
       * Try to find parameter to be sorted in internal-external mapping
     */
    if (null != parameter.getParameterAnnotation(SortFor.class) && null != defaultSort) {

        Class<?> domainModelType = parameter.getParameterAnnotation(SortFor.class).value();
        CriteriaMap<?> map = criteriaMapFactory.getCriteriaMap(domainModelType);

        /*
        * Build Sort with search criteria from internal domain model
        */
        return new Sort(StreamSupport.stream(defaultSort.spliterator(), false).map(order -> {
            Optional<CriteriaHolder> criteriaHolder = map.getCriteriaHolderUnchecked(order.getProperty());

            BusinessRule.expect(criteriaHolder, Preconditions.IS_PRESENT)
                    .verify(ErrorType.INCORRECT_SORTING_PARAMETERS, order.getProperty());
            return new Order(order.getDirection(), criteriaHolder.get().getQueryCriteria());
        }).collect(toList()));
    } else {
        /*
         * Return default sort in case there are no SortFor annotation
         */
        return defaultSort;
    }

}