All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.softicar.platform.common.container.data.table.in.memory.InMemoryDataTableColumnInternalValueComparatorFactory Maven / Gradle / Ivy

Go to download

The SoftiCAR Platform is a lightweight, Java-based library to create interactive business web applications.

There is a newer version: 50.0.0
Show newest version
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); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy