package fr.openwide.core.jpa.config.spring.convert.converter; import java.io.Serializable; import org.apache.commons.lang3.tuple.Pair; import org.springframework.core.GenericTypeResolver; import fr.openwide.core.jpa.business.generic.model.GenericEntity; public class GenericEntityTypeResolver { private GenericEntityTypeResolver() { } /** * @return the resolved entity key type parameter (K) and entity type parameter (E), or {@code null} if not resolvable */ @SuppressWarnings("unchecked") public static <K extends Serializable & Comparable<K>, E extends GenericEntity<K, E>> Pair<Class<K>, Class<E>> resolveTypeParameters(Class<? extends E> clazz) { Class<?>[] typeParameters = GenericTypeResolver.resolveTypeArguments(clazz, GenericEntity.class); return typeParameters == null ? null : Pair.of((Class<K>) typeParameters[0], (Class<E>) typeParameters[1]); } /** * @return the resolved entity key type parameter (K), or {@code null} if not resolvable */ @SuppressWarnings("unchecked") public static <K extends Serializable & Comparable<K>, E extends GenericEntity<K, ?>> Class<K> resolveKeyTypeParameter(Class<E> clazz) { Class<?>[] typeParameters = GenericTypeResolver.resolveTypeArguments(clazz, GenericEntity.class); return typeParameters == null ? null : (Class<K>) typeParameters[0]; } }