com.softicar.platform.common.container.data.table.in.memory.InMemoryDataTableColumnInternalValueComparatorFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of platform-common Show documentation
Show all versions of platform-common Show documentation
The SoftiCAR Platform is a lightweight, Java-based library to create interactive business web applications.
package com.softicar.platform.common.container.data.table.in.memory;
import com.softicar.platform.common.core.entity.IEntity;
import com.softicar.platform.common.core.utils.CastUtils;
import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;
import java.util.Optional;
class InMemoryDataTableColumnInternalValueComparatorFactory {
public Optional> create(Class valueClass) {
// compare entities
if (IEntity.class.isAssignableFrom(valueClass)) {
Comparator simpleItemComparator = Comparator//
. comparing(entity -> entity.toDisplayWithoutId().toString(), this::compareWithCollation)
.thenComparing(IEntity::getId);
Comparator comparator = (a, b) -> simpleItemComparator.compare(IEntity.class.cast(a), IEntity.class.cast(b));
return Optional.of(comparator);
}
// compare strings
else if (String.class.isAssignableFrom(valueClass)) {
return Optional.of(this::compareWithCollation);
}
// compare any other comparable instances
else if (Comparable.class.isAssignableFrom(valueClass)) {
Class> comparableClass = CastUtils.cast(Comparable.class);
Comparator comparator = (V a, V b) -> comparableClass.cast(a).compareTo(b);
return Optional.of(comparator);
}
else {
return Optional.empty();
}
}
/**
* Compares the given values in a collation-aware manner.
*
* Does NOT rely on the system's default locale.
*/
private int compareWithCollation(Object first, Object second) {
return Collator.getInstance(Locale.US).compare(first, second);
}
}