package org.sef4j.core.helpers.export; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Map; public class ExportFragment<T> { private final ExportFragmentsProvider<T> provider; /** id of fragment ... may be null for non-identifaible fragments */ private final Object id; private T value; private int priority; // ------------------------------------------------------------------------ public ExportFragment(ExportFragmentsProvider<T> provider, Object id, T value) { this(provider, id, value, 1); } public ExportFragment(ExportFragmentsProvider<T> provider, Object id, T value, int priority) { this.provider = provider; this.id = id; this.value = value; this.priority = priority; } // ------------------------------------------------------------------------ public int getPriority() { return priority; } public void setPriority(int priority) { this.priority = priority; } public T getValue() { return value; } public void setValue(T value) { this.value = value; } public ExportFragmentsProvider<T> getProvider() { return provider; } public Object getId() { return id; } // static utilities // ------------------------------------------------------------------------ public static <T> List<T> lsToValues(Collection<ExportFragment<T>> src) { List<T> res = new ArrayList<T>(src.size()); copyValuesTo(res, src); return res; } public static <T> void copyValuesTo(Collection<T> res, Collection<ExportFragment<T>> src) { for(ExportFragment<T> e : src) { res.add(e.getValue()); } } public static class ByDescPriorityComparator<T> implements Comparator<ExportFragment<T>> { private static final ByDescPriorityComparator<Object> INSTANCE = new ByDescPriorityComparator<Object>(); @SuppressWarnings("unchecked") public static <T> ByDescPriorityComparator<T> instance() { return (ByDescPriorityComparator<T>) INSTANCE; } @Override public int compare(ExportFragment<T> o1, ExportFragment<T> o2) { int y = o1.getPriority(); int x = o2.getPriority(); // compare x <> y (in descending order for o1 <> o2) // return Integer.compare(o2Prio, o2Prio); .. method since jdk7 return (x < y) ? -1 : ((x == y) ? 0 : 1); } } public static <T> void addAllToPriorityList(Map<Integer,List<ExportFragment<T>>> dest, Collection<ExportFragment<T>> fragments) { for (ExportFragment<T> fragment : fragments) { addToPriorityList(dest, fragment); } } public static <T> void addToPriorityList(Map<Integer,List<ExportFragment<T>>> dest, ExportFragment<T> fragment) { int priority = fragment.getPriority(); List<ExportFragment<T>> prioList = dest.get(priority); if (prioList == null) { prioList = new ArrayList<ExportFragment<T>>(); dest.put(priority, prioList); } prioList.add(fragment); } }