package org.seasar.doma.internal.apt.domain;

/**
 * @param <T> T
 * @param <U> U
 */
@javax.annotation.Generated(value = { "Doma", "@VERSION@" }, date = "1970-01-01T09:00:00.000+0900")
public final class _ParametarizedOfSalary<T, U> implements org.seasar.doma.jdbc.domain.DomainType<java.math.BigDecimal, org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U>> {

    static {
        org.seasar.doma.internal.Artifact.validateVersion("@VERSION@");
    }

    @SuppressWarnings("rawtypes")
    private static final _ParametarizedOfSalary singleton = new _ParametarizedOfSalary();

    private _ParametarizedOfSalary() {
    }

    @Override
    public org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U> newDomain(java.math.BigDecimal value) {
        return org.seasar.doma.internal.apt.domain.ParametarizedOfSalary.of(value);
    }

    @Override
    public Class<java.math.BigDecimal> getValueClass() {
        return java.math.BigDecimal.class;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Class<org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U>> getDomainClass() {
        Class<?> clazz = org.seasar.doma.internal.apt.domain.ParametarizedOfSalary.class;
        return (Class<org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U>>) clazz;
    }

    @Override
    public org.seasar.doma.jdbc.domain.DomainWrapper<java.math.BigDecimal, org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U>> getWrapper(org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U> domain) {
        return new Wrapper<T, U>(domain);
    }

    /**
     * @return the singleton
     */
    @SuppressWarnings("unchecked")
    public static <T, U> _ParametarizedOfSalary<T, U> getSingletonInternal() {
        return (_ParametarizedOfSalary<T, U>) singleton;
    }

    private static class Wrapper<T, U> extends org.seasar.doma.wrapper.BigDecimalWrapper implements org.seasar.doma.jdbc.domain.DomainWrapper<java.math.BigDecimal, org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U>> {

        private org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U> domain;

        private Wrapper(org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U> domain) {
            this.domain = domain;
        }

        @Override
        protected java.math.BigDecimal doGet() {
            if (domain == null) {
                return null;
            }
            return domain.getValue();
        }

        @Override
        protected void doSet(java.math.BigDecimal value) {
            domain = org.seasar.doma.internal.apt.domain.ParametarizedOfSalary.of(value);
        }

        @Override
        public org.seasar.doma.internal.apt.domain.ParametarizedOfSalary<T, U> getDomain() {
            return domain;
        }
    }
}
