package com.android.pc.ioc.core.kernel; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; @SuppressWarnings({ "rawtypes", "unchecked" }) public abstract class KernelList { /** EMPTY_LIST */ public static final List EMPTY_LIST = new ArrayList(); /** * @param list * @param index * @return */ public static <T> T get(List<T> list, int index) { return get(list, null, index); } /** * @param list * @param defaultValue * @param index * @return */ public static <T> T get(List<T> list, T defaultValue, int index) { if (index >= 0 && index < list.size()) { return list.get(index); } return defaultValue; } /** * @author absir * */ public interface Orderable { public int getOrder(); } /** * @param list * @param element */ public static <T extends Orderable> void addOrder(List<T> list, T element) { int order = element.getOrder(); int size = list.size(); for (int i = 0; i < size; i++) { if (order < list.get(i).getOrder()) { list.add(i, element); return; } } list.add(element); } /** * @param list * @param element */ public static <T extends Orderable> void addOrderOnly(List<T> list, T element) { int order = element.getOrder(); int size = list.size(); for (int i = 0; i < size; i++) { Orderable orderable = list.get(i); if (orderable == element) { return; } if (order < orderable.getOrder()) { list.add(i, element); return; } } list.add(element); } /** COMPARATOR */ public static final Comparator<Orderable> COMPARATOR = new Comparator<Orderable>() { @Override public int compare(Orderable lhs, Orderable rhs) { // TODO Auto-generated method stub return lhs.getOrder() - rhs.getOrder(); } }; /** * @param list */ public static <T extends Orderable> void sortOrderable(List<T> list) { Collections.sort(list, COMPARATOR); } /** COMPARATOR_DESC */ public static final Comparator<Orderable> COMPARATOR_DESC = new Comparator<Orderable>() { @Override public int compare(Orderable lhs, Orderable rhs) { // TODO Auto-generated method stub return rhs.getOrder() - lhs.getOrder(); } }; /** * @param list */ public static <T extends Orderable> void sortOrderableDesc(List<T> list) { Collections.sort(list, COMPARATOR_DESC); } /** * @param element * @return */ public static int getOrder(Object element) { return element instanceof Orderable ? ((Orderable) element).getOrder() : 0; } /** * @param list * @param element */ public static void addOrderObject(List list, Object element) { int order = getOrder(element); int size = list.size(); for (int i = 0; i < size; i++) { if (order < getOrder(list.get(i))) { list.add(i, element); return; } } list.add(element); } /** COMMON_COMPARATOR */ public static final Comparator COMMON_COMPARATOR = new Comparator() { @Override public int compare(Object lhs, Object rhs) { // TODO Auto-generated method stub return getOrder(lhs) - getOrder(rhs); } }; /** * @param list */ public static void sortCommonObjects(List list) { Collections.sort(list, COMMON_COMPARATOR); } }