package org.eclipse.nebula.widgets.treemapper.examples;
import java.util.Comparator;
import org.eclipse.jface.viewers.ILabelProvider;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class XMLNodesComparator implements Comparator<Node> {
private ILabelProvider labelProvider;
public XMLNodesComparator() {
labelProvider = new DOMLabelProvider();
}
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(Node arg0, Node arg1) {
// At least one is an attribute
if (arg0 instanceof Attr && !(arg1 instanceof Attr)) {
return -1;
} else if (arg1 instanceof Attr && !(arg0 instanceof Attr)) {
return 1;
} else if (arg0 instanceof Attr && arg1 instanceof Attr) {
return labelProvider.getText(arg0).compareTo(labelProvider.getText(arg1));
}
// No attribute, at least one in an element
if (arg0 instanceof Element && !(arg1 instanceof Element)) {
return -1;
} else if (arg1 instanceof Element && !(arg0 instanceof Element)) {
return 1;
} else if (arg0 instanceof Element && arg1 instanceof Element) {
return labelProvider.getText(arg0).compareTo(labelProvider.getText(arg1));
}
return 0;
}
}