package fr.openwide.core.jpa.more.business.task.search; import java.util.List; import org.apache.lucene.search.SortField; import com.google.common.collect.ImmutableList; import fr.openwide.core.jpa.business.generic.model.GenericEntity; import fr.openwide.core.jpa.more.business.sort.ISort; import fr.openwide.core.jpa.more.business.sort.SortUtils; import fr.openwide.core.jpa.more.business.task.model.QueuedTaskHolder; import fr.openwide.core.jpa.more.util.binding.CoreJpaMoreBindings; public enum QueuedTaskHolderSort implements ISort<SortField> { CREATION_DATE { @Override public List<SortField> getSortFields(SortOrder sortOrder) { return ImmutableList.of( SortUtils.luceneLongSortField(this, sortOrder, CoreJpaMoreBindings.queuedTaskHolder().endDate().getPath(), NullSortValue.GREATEST), SortUtils.luceneLongSortField(this, sortOrder, CoreJpaMoreBindings.queuedTaskHolder().startDate().getPath(), NullSortValue.GREATEST), SortUtils.luceneSortField(this, sortOrder, SortField.Type.LONG, CoreJpaMoreBindings.queuedTaskHolder().creationDate().getPath()) ); } @Override public SortOrder getDefaultOrder() { return SortOrder.DESC; } }, NAME { @Override public List<SortField> getSortFields(SortOrder sortOrder) { return ImmutableList.of( SortUtils.luceneSortField(this, sortOrder, SortField.Type.STRING, QueuedTaskHolder.NAME_SORT_FIELD_NAME) ); } @Override public SortOrder getDefaultOrder() { return SortOrder.ASC; } }, ID { @Override public List<SortField> getSortFields(SortOrder sortOrder) { return ImmutableList.of( SortUtils.luceneSortField(this, sortOrder, SortField.Type.LONG, GenericEntity.ID_SORT) ); } @Override public SortOrder getDefaultOrder() { return SortOrder.DESC; } }; @Override public abstract SortOrder getDefaultOrder(); @Override public abstract List<SortField> getSortFields(SortOrder sortOrder); // TODO RJO Sort : pourquoi on n'a pas ça dans l'interface ? public List<SortField> getSortFields() { return getSortFields(getDefaultOrder()); } }