package fr.openwide.core.basicapp.web.application.referencedata.model; import org.apache.lucene.search.SortField; import com.google.common.collect.ImmutableMap; import fr.openwide.core.jpa.more.business.generic.model.GenericListItem; import fr.openwide.core.jpa.more.business.generic.model.search.GenericListItemSort; import fr.openwide.core.jpa.more.business.generic.query.IGenericListItemSearchQuery; import fr.openwide.core.jpa.more.business.generic.query.ISimpleGenericListItemSearchQuery; import fr.openwide.core.jpa.more.business.sort.ISort; import fr.openwide.core.wicket.more.application.CoreWicketApplication; import fr.openwide.core.wicket.more.markup.html.sort.model.CompositeSortModel; import fr.openwide.core.wicket.more.markup.html.sort.model.CompositeSortModel.CompositingStrategy; public abstract class SimpleGenericListItemDataProvider<T extends GenericListItem<? super T>, S extends ISort<SortField>> extends AbstractGenericListItemDataProvider<T, S> { private static final long serialVersionUID = 5698542948288856570L; public static <T extends GenericListItem<? super T>> SimpleGenericListItemDataProvider<T, GenericListItemSort> forQueryType( final Class<? extends IGenericListItemSearchQuery<T, GenericListItemSort, ?>> queryType ) { return new SimpleGenericListItemDataProvider<T, GenericListItemSort>(defaultSortModel()) { private static final long serialVersionUID = 1L; @Override protected IGenericListItemSearchQuery<T, GenericListItemSort, ?> createSearchQuery() { return createSearchQuery(queryType); } }; } public static <T extends GenericListItem<? super T>> SimpleGenericListItemDataProvider<T, GenericListItemSort> forItemType(final Class<T> itemType) { return new SimpleGenericListItemDataProvider<T, GenericListItemSort>(defaultSortModel()) { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override protected IGenericListItemSearchQuery<T, GenericListItemSort, ?> createSearchQuery() { return CoreWicketApplication.get().getApplicationContext().getBean( ISimpleGenericListItemSearchQuery.class, itemType ); } }; } private static CompositeSortModel<GenericListItemSort> defaultSortModel() { return new CompositeSortModel<GenericListItemSort>( CompositingStrategy.LAST_ONLY, ImmutableMap.of( GenericListItemSort.LABEL, GenericListItemSort.LABEL.getDefaultOrder() ), ImmutableMap.of( GenericListItemSort.ID, GenericListItemSort.ID.getDefaultOrder() ) ); } private SimpleGenericListItemDataProvider(CompositeSortModel<S> sortModel) { super(sortModel); } @Override protected abstract IGenericListItemSearchQuery<T, S, ?> createSearchQuery(); }