UUIDGenerator.java

package com.github.mygreen.sqlmapper.core.id;

import java.util.List;
import java.util.UUID;

import org.springframework.dao.DataIntegrityViolationException;

import com.github.mygreen.sqlmapper.core.annotation.GeneratedValue.GenerationType;

import lombok.RequiredArgsConstructor;

/**
 * {@link GenerationType#UUID}方式でIDの値を自動生成するIDジェネレータです。
 * <p>サポートするIDのクラスタイプは、{@link UUID} / {@link String} です。
 *
 * @author T.TSUCHIE
 *
 */
@RequiredArgsConstructor
public class UUIDGenerator implements IdGenerator {

    /**
     * サポートしているクラスタイプ
     */
    private static final List<Class<?>> SUPPORTED_TYPE_LIST = List.of(UUID.class, String.class);

    /**
     * 生成するIDのクラスタイプ
     */
    private final Class<?> requiredType;

    @Override
    public boolean isSupportedType(Class<?> type) {
        return SUPPORTED_TYPE_LIST.contains(type);
    }

    @Override
    public Class<?>[] getSupportedTypes() {
        return SUPPORTED_TYPE_LIST.toArray(new Class[SUPPORTED_TYPE_LIST.size()]);
    }

    @Override
    public Object generateValue(final IdGenerationContext context) {

        UUID value = UUID.randomUUID();

        if(requiredType == UUID.class) {
            return value;

        } else if(requiredType == String.class) {
            return value.toString();
        }

        throw new DataIntegrityViolationException("not supported java type : " + requiredType.getName());
    }
}