mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-01-18 21:42:10 +01:00
create priority ordering for instances
This commit is contained in:
@@ -71,12 +71,25 @@ public final class Priorities
|
||||
*
|
||||
* @return sorted class list
|
||||
*/
|
||||
public static <T> List<Class<? extends T>> sort(
|
||||
Iterable<Class<? extends T>> unordered)
|
||||
public static <T> List<Class<? extends T>> sort(Iterable<Class<? extends T>> unordered)
|
||||
{
|
||||
return new PriorityOrdering<T>().sortedCopy(unordered);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of instances sorted by priority.
|
||||
*
|
||||
* @param <T> type of class
|
||||
* @param unordered unordered instances
|
||||
*
|
||||
* @return sorted instance list
|
||||
*/
|
||||
public static <T> List<T> sortInstances(Iterable<T> unordered)
|
||||
{
|
||||
return new PriorityInstanceOrdering<T>().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 <T> type of instance
|
||||
*/
|
||||
public static class PriorityInstanceOrdering<T> extends Ordering<T>
|
||||
{
|
||||
|
||||
/**
|
||||
* 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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 --------------------------------------------------------
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user