package fr.openwide.core.basicapp.core.business.common.model.comparator; import java.util.Comparator; import java.util.Locale; import com.google.common.collect.Ordering; import fr.openwide.core.basicapp.core.business.common.model.LocalizedGenericListItem; import fr.openwide.core.basicapp.core.business.common.model.embeddable.LocalizedText; import fr.openwide.core.jpa.business.generic.model.GenericEntity; import fr.openwide.core.jpa.business.generic.util.AbstractGenericEntityComparator; public class LocalizedGenericListItemComparator extends AbstractGenericEntityComparator<Long, LocalizedGenericListItem<?>> { private static final long serialVersionUID = -6024767658595096844L; private static final Ordering<Integer> DEFAULT_POSITION_COMPARATOR = Ordering.natural().nullsLast(); private final Comparator<? super Integer> positionComparator; private final Comparator<? super String> codeComparator; private final Comparator<? super LocalizedText> labelComparator; public LocalizedGenericListItemComparator(Locale locale) { super(); positionComparator = DEFAULT_POSITION_COMPARATOR; codeComparator = GenericEntity.DEFAULT_STRING_COLLATOR; labelComparator = new LocalizedTextComparator(locale); } @Override protected int compareNotNullObjects(LocalizedGenericListItem<?> left,LocalizedGenericListItem<?> right) { // on trie en priorité sur la position, puis sur le libellé et enfin par l'identifiant int order = positionComparator.compare(left.getPosition(), right.getPosition()); if (order == 0) { order = codeComparator.compare(left.getCode(), right.getCode()); } if (order == 0) { order = labelComparator.compare(left.getLabel(), right.getLabel()); } if (order == 0) { order = super.compareNotNullObjects(left, right); } return order; } }