package org.jboss.seam.util;
import java.util.ArrayList;
import java.util.List;
public class Sorter<T> {
private List<SortItem<T>> list = null; // new ArrayList();
public List<SortItem<T>> sort(List<SortItem<T>> lst) {
this.list = lst;
List<SortItem<T>> res = new ArrayList<SortItem<T>>();
SortItem<T> inmost = null;
do {
inmost = getInmost();
if (inmost != null) {
res.add(inmost);
remove(inmost);
}
} while (!list.isEmpty() && inmost != null);
if (!list.isEmpty()) {
throw new IllegalArgumentException("Can not sort list:" + list);
}
return res;
}
private void remove(SortItem<T> item) {
list.remove(item);
for (SortItem<T> o : list) {
o.getWithin().remove(item);
}
}
private SortItem<T> getInmost() {
SortItem<T> res = null;
for (SortItem<T> o : list) {
if (o.getWithin().isEmpty() && nobodyWantsAround(o)) {
res = o;
break;
}
}
return res;
}
private boolean nobodyWantsAround(SortItem<T> item) {
boolean res = true;
for (SortItem<T> o : list) {
if (o.getAround().contains(item)) {
res = false;
break;
}
}
return res;
}
}