package sk.stuba.fiit.perconik.eclipse.swt; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.eclipse.swt.SWT; import static java.util.Collections.reverseOrder; public enum SortDirection { NONE(SWT.NONE) { @Override public <T extends Comparable<? super T>> void sort(final List<T> list) {} @Override public <T> void sort(final List<T> list, final Comparator<? super T> comparator) {} }, UP(SWT.UP) { @Override public <T extends Comparable<? super T>> void sort(final List<T> list) { Collections.sort(list); } @Override public <T> void sort(final List<T> list, final Comparator<? super T> comparator) { Collections.sort(list, comparator); } }, DOWN(SWT.DOWN) { @Override public <T extends Comparable<? super T>> void sort(final List<T> list) { Collections.sort(list, reverseOrder()); } @Override public <T> void sort(final List<T> list, final Comparator<? super T> comparator) { Collections.sort(list, reverseOrder(comparator)); } }; private final int value; private SortDirection(final int value) { this.value = value; } public static SortDirection valueOf(final int value) { if (value == NONE.value) { return NONE; } else if (value == UP.value) { return UP; } else if (value == DOWN.value) { return DOWN; } throw new IllegalArgumentException(); } public SortDirection opposite() { return this == NONE ? NONE : (this == UP ? DOWN : UP); } public abstract <T extends Comparable<? super T>> void sort(List<T> list); public abstract <T> void sort(List<T> list, Comparator<? super T> comparator); public int getValue() { return this.value; } }