/**
*
*/
package org.openntf.domino.graph;
import java.io.Serializable;
import java.util.Comparator;
import java.util.Date;
import java.util.logging.Logger;
import org.openntf.domino.DateTime;
import com.tinkerpop.blueprints.Element;
/**
* @author nfreeman
*
*/
@Deprecated
public class ElementComparator implements Comparator<Element>, Serializable {
@SuppressWarnings("unused")
private static final Logger log_ = Logger.getLogger(ElementComparator.class.getName());
private static final long serialVersionUID = 1L;
private String[] props_;
private IDominoProperties[] dProps_;
private final boolean caseSensitive_;
public ElementComparator(final IDominoProperties... props) {
dProps_ = props;
caseSensitive_ = false;
}
public ElementComparator(final String... props) {
if (props == null || props.length == 0) {
props_ = new String[0];
} else {
props_ = props;
}
caseSensitive_ = false;
}
public ElementComparator(final boolean caseSensitive, final String... props) {
if (props == null || props.length == 0) {
props_ = new String[0];
} else {
props_ = props;
}
caseSensitive_ = caseSensitive;
}
@Override
public int compare(final Element arg0, final Element arg1) {
int result = 0;
if (dProps_ != null && dProps_.length > 0) {
result = compareProps((IDominoElement) arg0, (IDominoElement) arg1);
} else {
result = compareStrs((IDominoElement) arg0, (IDominoElement) arg1);
}
return result;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private int compareProps(final IDominoElement arg0, final IDominoElement arg1) {
int result = 0;
for (IDominoProperties key : dProps_) {
boolean isInteger = Integer.class.equals(key.getType());
java.lang.Object v0 = DominoElement.getReflectiveProperty(arg0, key);
java.lang.Object v1 = DominoElement.getReflectiveProperty(arg1, key);
if (v0 == null && v1 == null) {
if (isInteger) {
v0 = Integer.MAX_VALUE;
v1 = Integer.MAX_VALUE;
} else {
result = 0;
}
} else if (v0 == null) {
if (isInteger) {
v0 = Integer.MAX_VALUE;
} else {
return -1;
}
} else if (v1 == null) {
if (isInteger) {
v1 = Integer.MAX_VALUE;
} else {
return 1;
}
}
if (v0 instanceof Number && v1 instanceof Number) {
double d0 = ((Number) v0).doubleValue();
double d1 = ((Number) v1).doubleValue();
if (d0 > d1) {
result = 1;
} else if (d1 > d0) {
result = -1;
}
} else if (v0 instanceof String && v1 instanceof String) {
String s0 = (String) v0;
String s1 = (String) v1;
if (caseSensitive_) {
result = s0.compareTo(s1);
} else {
result = s0.compareToIgnoreCase(s1);
}
} else if (v0 instanceof Date && v1 instanceof Date) {
Date d0 = (Date) v0;
Date d1 = (Date) v1;
result = d0.compareTo(d1);
} else if (v0 instanceof DateTime && v1 instanceof DateTime) {
DateTime d0 = (DateTime) v0;
DateTime d1 = (DateTime) v1;
result = d0.compareTo(d1);
} else if (v0 != null && v1 != null) {
if (v1.getClass() == v0.getClass() && Comparable.class.isAssignableFrom(v0.getClass())) {
result = ((Comparable) v0).compareTo(v1);
}
}
if (result != 0) {
break;
}
}
if (result == 0) {
result = ((Comparable) arg0.getId()).compareTo(arg1.getId());
// if (result == 0) {
// System.out.println("Element comparator still ended up with match!??!");
// result = -1;
// }
}
return result;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private int compareStrs(final IDominoElement arg0, final IDominoElement arg1) {
int result = 0;
for (String key : props_) {
java.lang.Object v0 = DominoElement.getReflectiveProperty(arg0, key);
java.lang.Object v1 = DominoElement.getReflectiveProperty(arg1, key);
if (v0 == null && v1 == null) {
result = 0;
} else if (v0 == null) {
return -1;
} else if (v1 == null) {
return 1;
}
if (v0 instanceof Number && v1 instanceof Number) {
double d0 = ((Number) v0).doubleValue();
double d1 = ((Number) v1).doubleValue();
if (d0 > d1) {
result = 1;
} else if (d1 > d0) {
result = -1;
}
} else if (v0 instanceof String && v1 instanceof String) {
String s0 = (String) v0;
String s1 = (String) v1;
if (caseSensitive_) {
result = s0.compareTo(s1);
} else {
result = s0.compareToIgnoreCase(s1);
}
} else if (v0 instanceof Date && v1 instanceof Date) {
Date d0 = (Date) v0;
Date d1 = (Date) v1;
result = d0.compareTo(d1);
} else if (v0 instanceof DateTime && v1 instanceof DateTime) {
DateTime d0 = (DateTime) v0;
DateTime d1 = (DateTime) v1;
result = d0.compareTo(d1);
} else if (v0 != null && v1 != null) {
if (v0 instanceof Comparable && v1 instanceof Comparable) {
result = ((Comparable) v0).compareTo(v1);
}
}
if (result != 0) {
break;
}
}
if (result == 0) {
result = ((Comparable) arg0.getId()).compareTo(arg1.getId());
// if (result == 0) {
// System.out.println("Element comparator still ended up with match!??!");
// result = -1;
// }
}
return result;
}
}