package com.deepnighttwo.resourceresolver.ui.views.utils;
import com.deepnighttwo.resourceresolver.ui.resolver.IColumnItemComparator;
import com.deepnighttwo.resourceresolver.ui.resolver.data.DataType;
import com.deepnighttwo.resourceresolver.ui.resolver.data.DateData;
import com.deepnighttwo.resourceresolver.ui.resolver.data.IResourceDetailsData;
import com.deepnighttwo.resourceresolver.ui.resolver.data.IntegerData;
import com.deepnighttwo.resourceresolver.ui.resolver.data.TextData;
public class DefaultColumnItemComparator implements IColumnItemComparator {
private static DefaultColumnItemComparator comparator = new DefaultColumnItemComparator();
private DefaultColumnItemComparator() {
}
public static DefaultColumnItemComparator getInstance() {
return comparator;
}
@Override
public int compare(IResourceDetailsData ele1, IResourceDetailsData ele2) {
if (ele1 == null && ele2 == null) {
return 0;
}
if (ele1 == null) {
ele1 = getDefaultValueForNull(ele2);
}
if (ele2 == null) {
ele2 = getDefaultValueForNull(ele1);
}
if (ele1.getClass() == ele2.getClass()) {
return ele1.compareTo(ele2);
}
if (ele1.getDataType() == ele2.getDataType()
&& (ele1.getDataType() == DataType.NUMBER || ele1.getDataType() == DataType.DATE)) {
return Double.compare(Double.valueOf(ele1.getDisplayText()),
Double.valueOf(ele1.getDisplayText()));
}
return ele1.getDisplayText().compareTo(ele2.getDisplayText());
}
private static IResourceDetailsData getDefaultValueForNull(
IResourceDetailsData another) {
if (another.getDataType() == DataType.NUMBER) {
return new IntegerData(Integer.MIN_VALUE);
}
if (another.getDataType() == DataType.TEXT) {
return new TextData("");
}
if (another.getDataType() == DataType.DATE) {
return new DateData(0);
}
throw new IllegalArgumentException();
}
}