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

com.github.leeonky.dal.format.Value Maven / Gradle / Ivy

package com.github.leeonky.dal.format;

import com.github.leeonky.dal.runtime.Data;
import com.github.leeonky.dal.runtime.IllegalFieldException;
import com.github.leeonky.util.BeanClass;
import com.github.leeonky.util.function.Comparator;

import java.util.Objects;

import static java.lang.String.format;

public interface Value extends Type {

    static  Value equalTo(T value) {
        return new Value() {
            @Override
            public boolean verify(T actual) {
                return Objects.equals(value, actual);
            }

            @Override
            public String errorMessage(String field, Object actual) {
                return format("Expecting field `%s` [%s] to be equal to [%s], but was not.", field, actual, value);
            }
        };
    }

    static  Value nullReference() {
        return new Value() {
            @Override
            public boolean verify(T actual) {
                return actual == null;
            }

            @Override
            public String errorMessage(String field, Object actual) {
                return format("Expecting field `%s` [%s] to be null, but was not.", field, actual);
            }
        };
    }

    static > Value lessThan(T value) {
        return compare(value, Comparator.lessThan(0), "less than");
    }

    static > Value greaterThan(T value) {
        return compare(value, Comparator.greaterThan(0), "greater than");
    }

    static > Value lessOrEqualTo(T value) {
        return compare(value, Comparator.lessOrEqualTo(0), "less or equal to");
    }

    static > Value greaterOrEqualTo(T value) {
        return compare(value, Comparator.greaterOrEqualTo(0), "greater or equal to");
    }

    static > Value compare(T value, Comparator comparator, String valueName) {
        return new ComparableValue<>(comparator, value, valueName);
    }

    @Override
    boolean verify(T actual);

    @Override
    default String errorMessage(String field, Object actual) {
        return format("Field `%s` is invalid", field);
    }

    @SuppressWarnings("unchecked")
    default T convertAs(Data actual, BeanClass type) {
        if (type == null)
            throw new IllegalFieldException();
        return (T) actual.convert(type.getType()).instance();
    }

    class ComparableValue> extends ComparableType implements Value {
        public ComparableValue(Comparator comparator, T value, String valueName) {
            super(comparator, value, valueName);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy