/** * Sorts the input string using property comparator. The property must have a getter and must be primitive type or * to implement Comparable. The sort is not case sensitive if the property is character based. * * @param listToSort Modifiable list to sort * @param sortParam The property to sort by and is ascending or descending. */ public static void sort(List listToSort, SortParam sortParam) { if (!listToSort.isEmpty() && sortParam != null) { final String property = sortParam.getProperty(); if (StringUtils.hasText(property)) { final SortDefinition sortDefinition = new MutableSortDefinition(property, true, sortParam.isAscending()); Collections.sort(listToSort, new PropertyComparator(sortDefinition)); } } }
private void sortList(List<D> list, SortParam sortParam) { if (sortParam != null && sortParam.getProperty().startsWith("detail.")) { ListPropertySorter.sort(list, sortParam); final String property = sortParam.getProperty().substring(7); final SortDefinition sortDefinition = new MutableSortDefinition(property, true, sortParam.isAscending()); Collections.sort(list, new PropertyComparator(sortDefinition)); } }
@Override @SuppressWarnings({"unchecked"}) public Iterator iterator(int first, int count) { final SortParam sortParam = getSort(); if (sortParam != null && sortParam.getProperty().startsWith("master.")) { ListPropertySorter.sort(list, sortParam); final String property = sortParam.getProperty().substring(7); final SortDefinition sortDefinition = new MutableSortDefinition(property, true, sortParam.isAscending()); Collections.sort(list, new PropertyComparator(sortDefinition)); } List<?> result = list.subList(first, first + count); return result.iterator(); }
@Override public Iterator<T> iterator(long first, long count) { long size = provider.size(); List<T> resources = new ArrayList<T>((int) size); Iterator<? extends T> iter = provider.iterator(0, size); while (iter.hasNext()) { resources.add(iter.next()); } if (comparators != null) { SortParam<String> sortParam = getSort(); if (sortParam != null) { String sortProperty = sortParam.getProperty(); if (sortProperty != null) { Comparator<T> comparator = comparators.get(sortProperty); if (comparator != null) { Collections.sort(resources, comparator); if (getSort().isAscending() == false) { Collections.reverse(resources); } } else { SortDefinition sortDefinition = new MutableSortDefinition(sortProperty, true, getSort().isAscending()); PropertyComparator.sort(resources, sortDefinition); } } } } return Collections.unmodifiableList(resources.subList((int) first, (int) (first + count))).iterator(); }
/** * Return the sort definition for this holder. */ public SortDefinition getSort() { return this.sort; }
private String getComparatorProperty(TestableBinding b) { // TODO: remove this nasty reflection once PropertyComparator is extended with the abbility // to query the SortDefinition return ((SortDefinition)getField(b.getContext().get(ListBinder.COMPARATOR_KEY), "sortDefinition")).getProperty(); }
/** * Create a new holder instance with the given source list. * * @param source the source List * @param sort the SortDefinition to start with */ public PartialPagedListHolder(List<E> source, SortDefinition sort) { setSource(source); setSort(sort); }
/** * Create a new holder instance with the given source list. * * @param source the source List * @param sort the SortDefinition to start with */ public PartialPagedListHolder(List<E> source, int totalRows, SortDefinition sort) { setSource(source); setTotalRows(totalRows); setSort(sort); }
/** * Set the sort definition for this holder. Typically an instance of * MutableSortDefinition. * * @see org.springframework.beans.support.MutableSortDefinition */ public void setSort(SortDefinition sort) { this.sort = sort; }