}
class ResultComparator implements Comparator<StoredObject> {
@SuppressWarnings("unchecked")
public int compare(StoredObject so1, StoredObject so2) {
SortSpec s = orderBy.get(0);
CmisSelector sel = s.getSelector();
int result;
if (sel instanceof ColumnReference) {
String propId = ((ColumnReference) sel).getPropertyId();
PropertyDefinition<?> pd = ((ColumnReference) sel).getPropertyDefinition();
Object propVal1 = PropertyUtil.getProperty(so1, propId, pd);
Object propVal2 = PropertyUtil.getProperty(so2, propId, pd);
if (propVal1 == null && propVal2 == null) {
result = 0;
} else if (propVal1 == null) {
result = -1;
} else if (propVal2 == null) {
result = 1;
} else {
result = ((Comparable<Object>) propVal1).compareTo(propVal2);
}
} else {
// String funcName = ((FunctionReference) sel).getName();
// evaluate function here, currently ignore
result = 0;
}
if (!s.isAscending()) {
result = -result;
}
return result;
}
}