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

com.moon.spring.data.jpa.factory.JdbcAttributes Maven / Gradle / Ivy

package com.moon.spring.data.jpa.factory;

import com.moon.spring.data.jpa.annotation.JdbcDelete;
import com.moon.spring.data.jpa.annotation.JdbcInsert;
import com.moon.spring.data.jpa.annotation.JdbcSelect;
import com.moon.spring.data.jpa.annotation.JdbcUpdate;

import java.lang.annotation.Annotation;

/**
 * @author benshaoye
 */
public class JdbcAttributes implements JdbcSelect, JdbcInsert, JdbcUpdate, JdbcDelete {

    private final Class type;
    private final String value;

    private JdbcAttributes(String value, Class type) {
        this.value = value;
        this.type = type;
    }

    private JdbcAttributes(JdbcSelect attrs) {
        this(attrs.value(), JdbcSelect.class);
    }

    private JdbcAttributes(JdbcInsert attrs) {
        this(attrs.value(), JdbcInsert.class);
    }

    private JdbcAttributes(JdbcUpdate attrs) {
        this(attrs.value(), JdbcUpdate.class);
    }

    private JdbcAttributes(JdbcDelete attrs) {
        this(attrs.value(), JdbcDelete.class);
    }

    public static JdbcAttributes of(JdbcSelect attrs) {
        return attrs instanceof JdbcAttributes ? (JdbcAttributes) attrs : new JdbcAttributes(attrs);
    }

    public static JdbcAttributes of(JdbcInsert attrs) {
        return attrs instanceof JdbcAttributes ? (JdbcAttributes) attrs : new JdbcAttributes(attrs);
    }

    public static JdbcAttributes of(JdbcUpdate attrs) {
        return attrs instanceof JdbcAttributes ? (JdbcAttributes) attrs : new JdbcAttributes(attrs);
    }

    public static JdbcAttributes of(JdbcDelete attrs) {
        return attrs instanceof JdbcAttributes ? (JdbcAttributes) attrs : new JdbcAttributes(attrs);
    }

    public JdbcStrategy getJdbcStrategy() {
        if (type == JdbcSelect.class) {
            return JdbcStrategy.SELECT;
        }
        if (type == JdbcInsert.class) {
            return JdbcStrategy.INSERT;
        }
        if (type == JdbcUpdate.class) {
            return JdbcStrategy.UPDATE;
        }
        if (type == JdbcDelete.class) {
            return JdbcStrategy.DELETE;
        }
        throw new IllegalStateException("Unknown annotated type of: " + type);
    }

    @Override
    public Class annotationType() { return type; }

    @Override
    public String value() { return value; }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy