List of usage examples for org.springframework.data.domain Sort spliterator
default Spliterator<T> spliterator()
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; } }