package org.openedit.xml;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class ElementSorter implements Comparator
{
List<Comparator> stack = new ArrayList();
public ElementSorter(List<String> inSorts)
{
for(String sortby: inSorts)
{
if (sortby.endsWith("Up"))
{
sortby = sortby.substring(0, sortby.length() - 2);
stack.add( createComparator(true, sortby) );
}
else if (sortby.endsWith("Down"))
{
sortby = sortby.substring(0, sortby.length() - 4);
stack.add( createComparator(false, sortby) );
}
else
{
stack.add( createComparator(true, sortby) );
}
}
}
protected Comparator createComparator(final boolean reverse,final String inField)
{
Comparator created = new Comparator()
{
public int compare(Object o1, Object o2)
{
ElementData ed1 = null;
ElementData ed2 = null;
if( reverse )
{
ed1 = (ElementData) o1;
ed2 = (ElementData) o2;
}
else
{
ed2 = (ElementData) o1;
ed1 = (ElementData) o2;
}
String s1, s2;
if ("text".equals(inField) || "name".equals(inField))
{
s1 = ed1.getName();
s2 = ed2.getName();
}
else
{
s1 = ed1.get(inField);
s2 = ed2.get(inField);
}
if(s1 == null && s2 == null)
{
return 0;
}
if (s1 == null)
{
return 1;//s2.compareTo(s1);
}
if (s2 == null)
{
return -1;//-s1.compareTo(s2);
}
return s1.toLowerCase().compareTo(s2.toLowerCase());
}
};
return created;
}
@Override
public int compare(Object inO1, Object inO2)
{
for(Comparator compare : stack)
{
int found = compare.compare(inO1, inO2);
if( found != 0)
{
return found;
}
}
return 0;
}
}