diff --git a/scm-core/src/main/java/sonia/scm/Priorities.java b/scm-core/src/main/java/sonia/scm/Priorities.java index d2eb6062e0..d06395eace 100644 --- a/scm-core/src/main/java/sonia/scm/Priorities.java +++ b/scm-core/src/main/java/sonia/scm/Priorities.java @@ -71,12 +71,25 @@ public final class Priorities * * @return sorted class list */ - public static List> sort( - Iterable> unordered) + public static List> sort(Iterable> unordered) { return new PriorityOrdering().sortedCopy(unordered); } + /** + * Returns a list of instances sorted by priority. + * + * @param type of class + * @param unordered unordered instances + * + * @return sorted instance list + */ + public static List sortInstances(Iterable unordered) + { + return new PriorityInstanceOrdering().sortedCopy(unordered); + } + + //~--- get methods ---------------------------------------------------------- /** @@ -125,4 +138,28 @@ public final class Priorities return Ints.compare(getPriority(left), getPriority(right)); } } + + /** + * {@link Ordering} which orders instances by priority. + * + * @param type of instance + */ + public static class PriorityInstanceOrdering extends Ordering + { + + /** + * Compares the left instance with the right instance. + * + * + * @param left left instance + * @param right right instance + * + * @return compare value + */ + @Override + public int compare(T left, T right) + { + return Ints.compare(getPriority(left.getClass()), getPriority(right.getClass())); + } + } } diff --git a/scm-core/src/test/java/sonia/scm/PrioritiesTest.java b/scm-core/src/test/java/sonia/scm/PrioritiesTest.java index db284a28a3..578b2ac430 100644 --- a/scm-core/src/test/java/sonia/scm/PrioritiesTest.java +++ b/scm-core/src/test/java/sonia/scm/PrioritiesTest.java @@ -98,6 +98,21 @@ public class PrioritiesTest assertThat(cls, contains(B.class, C.class, A.class, D.class)); } + @Test + @SuppressWarnings("unchecked") + public void shouldSortInstances() + { + A a = new A(); + B b = new B(); + C c = new C(); + D d = new D(); + + List instances = ImmutableList.of(a, b, c, d); + + instances = Priorities.sortInstances(instances); + assertThat(instances, contains(b, c, a, d)); + } + //~--- inner classes -------------------------------------------------------- /**