mirror of
https://github.com/mvvasilev/personal-finances.git
synced 2025-04-18 21:59:52 +03:00
35 lines
No EOL
957 B
Java
35 lines
No EOL
957 B
Java
package dev.mvvasilev.common.data;
|
|
|
|
import jakarta.persistence.AttributeConverter;
|
|
import jakarta.persistence.Converter;
|
|
|
|
@Converter
|
|
public abstract class AbstractEnumConverter<T extends Enum<T> & PersistableEnum<E>, E> implements AttributeConverter<T, E> {
|
|
private final Class<T> clazz;
|
|
|
|
public AbstractEnumConverter(Class<T> clazz) {
|
|
this.clazz = clazz;
|
|
}
|
|
|
|
@Override
|
|
public E convertToDatabaseColumn(T attribute) {
|
|
return attribute != null ? attribute.value() : null;
|
|
}
|
|
|
|
@Override
|
|
public T convertToEntityAttribute(E dbData) {
|
|
if (dbData == null) {
|
|
return null;
|
|
}
|
|
|
|
T[] enums = clazz.getEnumConstants();
|
|
|
|
for (T e : enums) {
|
|
if (e.value().equals(dbData)) {
|
|
return e;
|
|
}
|
|
}
|
|
|
|
throw new UnsupportedOperationException(String.format("Can't find value '%s' for enum '%s'", dbData, clazz.getCanonicalName()));
|
|
}
|
|
} |