package com.revolsys.datatype;
import java.util.Arrays;
import java.util.Collection;
import com.revolsys.util.MathUtil;
public interface DataType {
static boolean equal(final Object object1, final Object object2) {
final DataType dataType = DataTypes.getDataType(object1);
return dataType.equals(object1, object2);
}
static boolean equal(final Object object1, final Object object2, final CharSequence... exclude) {
return equal(object1, object2, Arrays.asList(exclude));
}
static boolean equal(final Object object1, final Object object2,
final Collection<? extends CharSequence> excludeFieldNames) {
final DataType dataType = DataTypes.getDataType(object1);
return dataType.equals(object1, object2, excludeFieldNames);
}
default int compareNullFirst(final Object object1, final Object object2) {
if (object1 == null) {
if (object2 == null) {
return 0;
} else {
return -1;
}
} else {
if (object2 == null) {
return 1;
} else {
try {
final Comparable<Object> value1 = toObject(object1);
final Object value2 = toObject(object2);
return value1.compareTo(value2);
} catch (final Throwable e) {
return object1.toString().compareTo(object2.toString());
}
}
}
}
boolean equals(final Object object1, final Object object2);
default boolean equals(final Object object1, final Object object2,
final Collection<? extends CharSequence> excludeFieldNames) {
return equals(object1, object2);
}
Class<?> getJavaClass();
@SuppressWarnings("unchecked")
default <V> V getMaxValue() {
return (V)MathUtil.getMaxValue(getJavaClass());
}
@SuppressWarnings("unchecked")
default <V> V getMinValue() {
return (V)MathUtil.getMinValue(getJavaClass());
}
String getName();
default String getValidationName() {
if (Number.class.isAssignableFrom(getJavaClass())) {
return "number (" + getName() + ")";
} else {
return getName();
}
}
default boolean isInstance(final Object value) {
final Class<?> javaClass = getJavaClass();
return javaClass.isInstance(value);
}
default boolean isNumeric() {
final Class<?> javaClass = getJavaClass();
return Number.class.isAssignableFrom(javaClass);
}
default boolean isRequiresQuotes() {
return true;
}
@SuppressWarnings("unchecked")
default <V> V toObject(final Object value) {
return (V)value;
}
@SuppressWarnings("unchecked")
default <V> V toObject(final String value) {
return (V)toObject((Object)value);
}
default String toString(final Object value) {
if (value == null) {
return null;
} else {
return value.toString();
}
}
}