package components.matchtable; import objects.SoccerMatchAnalysis; import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import java.io.Serializable; import java.util.Comparator; import java.util.Iterator; import java.util.List; public class SortableSoccerMatchAnalysisDataProvider extends SortableDataProvider { class SortableDataProviderComparator implements Comparator, Serializable { @Override public int compare(SoccerMatchAnalysis o1, SoccerMatchAnalysis o2) { PropertyModel model1 = new PropertyModel<>(o1, getSort().getProperty()); PropertyModel model2 = new PropertyModel<>(o2, getSort().getProperty()); int result = model1.getObject().compareTo(model2.getObject()); if (!getSort().isAscending()) { result = -result; } return result; } } List matches; private SortableDataProviderComparator comparator = new SortableDataProviderComparator(); public SortableSoccerMatchAnalysisDataProvider(List matches) { this.matches = matches; setSort("calculatedPercentages.drawPercentage", SortOrder.DESCENDING); } @Override public Iterator iterator(long first, long count) { matches.sort(comparator); return matches.subList((int)first, (int)(first + count)).iterator(); } @Override public long size() { return matches.size(); } @Override public IModel model(SoccerMatchAnalysis object) { return Model.of(object); } }