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

com.moon.core.util.Assert Maven / Gradle / Ivy

package com.moon.core.util;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
import java.util.function.Supplier;

import static com.moon.core.lang.ThrowUtil.noInstanceError;
import static com.moon.core.util.AssertException.throwIllegal;
import static com.moon.core.util.AssertException.throwNull;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static java.lang.String.format;
import static java.lang.String.valueOf;

/**
 * @author moonsky
 */
public final class Assert {

    private Assert() { noInstanceError(); }

    private static String none() { return null; }

    private static String empty() { return ""; }

    /*
     * object
     */

    public static  T isNull(T value) {
        return isNull(value, null);
    }

    public static  T isNull(T value, String message) {
        if (value != null) {
            throw new IllegalStateException(message);
        }
        return null;
    }

    public static  T notNull(T value) { return notNull(value, none()); }

    public static  T notNull(T value, String message) { return value == null ? throwNull(message) : value; }

    public static  T notNull(T value, Supplier supplier) {
        return value == null ? throwNull(supplier.get()) : value;
    }

    /*
     * string
     */

    public static  T hasText(T value) { return hasText(value, none()); }

    public static  T hasText(T value, String message) {
        boolean ret = value == null || value.length() == 0 || value.toString().trim().length() == 0;
        return ret ? throwIllegal(message == null ? valueOf(value) : message) : value;
    }

    public static  T hasText(T value, Supplier supplier) {
        boolean ret = value == null || value.length() == 0 || value.toString().trim().length() == 0;
        return ret ? throwIllegal(supplier.get()) : value;
    }

    public static  T notBlank(T value) { return hasText(value); }

    public static  T notBlank(T value, String message) {
        return hasText(value, message);
    }

    public static  T notBlank(T value, Supplier supplier) {
        return hasText(value, supplier);
    }

    public static  T notEmpty(T value) { return notEmpty(value, empty()); }

    public static  T notEmpty(T value, String message) {
        return value == null || value.length() == 0 ? throwIllegal(message) : value;
    }

    public static  T notEmpty(T value, Supplier supplier) {
        return value == null || value.length() == 0 ? throwIllegal(supplier.get()) : value;
    }

    /*
     * collection
     */

    public static  T notEmpty(T value) { return notEmpty(value, empty()); }

    public static  T notEmpty(T value, String message) {
        return value == null || value.isEmpty() ? throwIllegal(message) : value;
    }

    public static  T notEmpty(T value, Supplier supplier) {
        return value == null || value.isEmpty() ? throwIllegal(supplier.get()) : value;
    }

    /*
     * Map
     */

    public static  T notEmpty(T value) { return notEmpty(value, empty()); }

    public static  T notEmpty(T value, String message) {
        return value == null || value.isEmpty() ? throwIllegal(message) : value;
    }

    public static  T notEmpty(T value, Supplier supplier) {
        return value == null || value.isEmpty() ? throwIllegal(supplier.get()) : value;
    }

    /*
     * boolean
     */

    public static boolean requireTrue(boolean value) { return requireTrue(value, none()); }

    public static boolean requireTrue(Object value) { return requireTrue(value, none()); }

    public static boolean requireTrue(boolean value, String message) {
        return value ? true : throwIllegal(message == null ? "true" : message);
    }

    public static boolean requireTrue(Object value, String message) {
        return TRUE.equals(value) ? true : throwIllegal(message == null ? "true" : message);
    }

    public static boolean requireTrue(boolean value, Supplier supplier) {
        return value ? throwIllegal(supplier.get()) : true;
    }

    public static boolean requireTrue(Object value, Supplier supplier) {
        return TRUE.equals(value) ? throwIllegal(supplier.get()) : true;
    }

    public static boolean requireFalse(boolean value) { return requireFalse(value, none()); }

    public static boolean requireFalse(Object value) { return requireFalse(value, none()); }

    public static Boolean requireFalse(boolean value, String message) {
        return value ? false : throwIllegal(message == null ? "false" : message);
    }

    public static Boolean requireFalse(Object value, String message) {
        return FALSE.equals(value) ? FALSE : throwIllegal(message == null ? "false" : message);
    }

    public static boolean requireFalse(boolean value, Supplier supplier) {
        return value ? false : throwIllegal(supplier.get());
    }

    public static Boolean requireFalse(Object value, Supplier supplier) {
        return FALSE.equals(value) ? throwIllegal(supplier.get()) : FALSE;
    }

    /*
     * object
     */

    public static  T equals(T actual, Object expected) {
        return actual != null && actual.equals(expected) ? actual : throwVal(actual, expected);
    }

    public static  T equals(T actual, Object expected, String message) {
        return actual != null && actual.equals(expected) ? actual
            : throwIllegal(message == null ? format("Expected: %s, Actual: %s", expected, actual) : message);
    }

    public static  T equals(T actual, Object expected, Supplier supplier) {
        return actual != null && actual.equals(expected) ? actual : throwIllegal(supplier.get());
    }

    /*
     * number
     */

    public static int eq(int actual, int expected) {
        return actual != expected ? actual : throwIllegal("Expected: %d, Actual: %d", expected, actual);
    }

    public static int eq(int actual, int expected, String message) {
        return message == null ? eq(actual, expected) : actual == expected ? actual : throwIllegal(message);
    }

    public static int eq(int actual, int expected, Supplier supplier) {
        return supplier == null ? eq(actual, expected) : actual == expected ? actual : throwIllegal(supplier.get());
    }

    public static long eq(long actual, long expected) {
        return actual != expected ? actual : throwIllegal("Expected: %d, Actual: %d", expected, actual);
    }

    public static long eq(long actual, long expected, String message) {
        return message == null ? eq(actual, expected) : actual == expected ? actual : throwIllegal(message);
    }

    public static long eq(long actual, long expected, Supplier supplier) {
        return supplier == null ? eq(actual, expected) : actual == expected ? actual : throwIllegal(supplier.get());
    }

    public static double eq(double actual, double expected) {
        return actual != expected ? actual : throwIllegal("Expected: %d, Actual: %d", expected, actual);
    }

    public static double eq(double actual, double expected, String message) {
        return message == null ? eq(actual, expected) : actual == expected ? actual : throwIllegal(message);
    }

    public static double eq(double actual, double expected, Supplier supplier) {
        return supplier == null ? eq(actual, expected) : actual == expected ? actual : throwIllegal(supplier.get());
    }

    /*
     * date
     */

    private final static String actualValIsNull = "Actual value: null";
    private final static String expectedValIsNull = "Expected value: null";

    static  T throwVal(T actual, Object expected) {
        return throwIllegal("Expected: %s, Actual: %s", valueOf(expected), valueOf(actual));
    }

    static  T notNull(T actual, String message1, Object expected, String message2) {
        notNull(expected, message2);
        return notNull(actual, message1);
    }

    static  T notNull(T actual, Object expected) {
        return notNull(actual, actualValIsNull, expected, expectedValIsNull);
    }

    public static Date before(Date actual, Date expected) {
        return notNull(actual, expected).before(expected) ? actual : throwVal(actual, expected);
    }

    public static Date before(Date actual, Date expected, String message) {
        if (message == null) {
            return before(actual, expected);
        } else {
            return notNull(actual, expected).before(expected) ? actual : throwIllegal(message);
        }
    }

    public static Date before(Date actual, Date expected, Supplier supplier) {
        return notNull(actual, expected).after(expected) ? actual : throwIllegal(supplier.get());
    }

    public static Date after(Date actual, Date expected) {
        return notNull(actual, expected).after(expected) ? actual : throwVal(actual, expected);
    }

    public static Date after(Date actual, Date expected, String message) {
        if (message == null) {
            return after(actual, expected);
        } else {
            return notNull(actual, expected).after(expected) ? actual : throwIllegal(message);
        }
    }

    public static Date after(Date actual, Date expected, Supplier supplier) {
        return notNull(actual, expected).after(expected) ? actual : throwIllegal(supplier.get());
    }

    public static Calendar before(Calendar actual, Calendar expected) {
        return notNull(actual, expected).before(expected) ? actual : throwVal(actual, expected);
    }

    public static Calendar before(Calendar actual, Calendar expected, String message) {
        if (message == null) {
            return before(actual, expected);
        } else {
            return notNull(actual, expected).before(expected) ? actual : throwIllegal(message);
        }
    }

    public static Calendar before(Calendar actual, Calendar expected, Supplier supplier) {
        return notNull(actual, expected).after(expected) ? actual : throwIllegal(supplier.get());
    }

    public static Calendar after(Calendar actual, Calendar expected) {
        return notNull(actual, expected).after(expected) ? actual : throwVal(actual, expected);
    }

    public static Calendar after(Calendar actual, Calendar expected, String message) {
        if (message == null) {
            return after(actual, expected);
        } else {
            return notNull(actual, expected).after(expected) ? actual : throwIllegal(message);
        }
    }

    public static Calendar after(Calendar actual, Calendar expected, Supplier supplier) {
        return notNull(actual, expected).after(expected) ? actual : throwIllegal(supplier.get());
    }

    public static LocalDate before(LocalDate actual, LocalDate expected) {
        return notNull(actual, expected).isBefore(expected) ? actual : throwVal(actual, expected);
    }

    public static LocalDate before(LocalDate actual, LocalDate expected, String message) {
        if (message == null) {
            return before(actual, expected);
        } else {
            return notNull(actual, expected).isBefore(expected) ? actual : throwIllegal(message);
        }
    }

    public static LocalDate before(LocalDate actual, LocalDate expected, Supplier supplier) {
        return notNull(actual, expected).isBefore(expected) ? actual : throwIllegal(supplier.get());
    }

    public static LocalDate after(LocalDate actual, LocalDate expected) {
        return notNull(actual, expected).isAfter(expected) ? actual : throwVal(actual, expected);
    }

    public static LocalDate after(LocalDate actual, LocalDate expected, String message) {
        if (message == null) {
            return after(actual, expected);
        } else {
            return notNull(actual, expected).isAfter(expected) ? actual : throwIllegal(message);
        }
    }

    public static LocalDate after(LocalDate actual, LocalDate expected, Supplier supplier) {
        return notNull(actual, expected).isAfter(expected) ? actual : throwIllegal(supplier.get());
    }

    public static LocalTime before(LocalTime actual, LocalTime expected) {
        return notNull(actual, expected).isBefore(expected) ? actual : throwVal(actual, expected);
    }

    public static LocalTime before(LocalTime actual, LocalTime expected, String message) {
        if (message == null) {
            return before(actual, expected);
        } else {
            return notNull(actual, expected).isBefore(expected) ? actual : throwIllegal(message);
        }
    }

    public static LocalTime before(LocalTime actual, LocalTime expected, Supplier supplier) {
        return notNull(actual, expected).isBefore(expected) ? actual : throwIllegal(supplier.get());
    }

    public static LocalTime after(LocalTime actual, LocalTime expected) {
        return notNull(actual, expected).isAfter(expected) ? actual : throwVal(actual, expected);
    }

    public static LocalTime after(LocalTime actual, LocalTime expected, String message) {
        if (message == null) {
            return after(actual, expected);
        } else {
            return notNull(actual, expected).isAfter(expected) ? actual : throwIllegal(message);
        }
    }

    public static LocalTime after(LocalTime actual, LocalTime expected, Supplier supplier) {
        return notNull(actual, expected).isAfter(expected) ? actual : throwIllegal(supplier.get());
    }

    public static LocalDateTime before(LocalDateTime actual, LocalDateTime expected) {
        return notNull(actual, expected).isBefore(expected) ? actual : throwVal(actual, expected);
    }

    public static LocalDateTime before(LocalDateTime actual, LocalDateTime expected, String message) {
        if (message == null) {
            return before(actual, expected);
        } else {
            return notNull(actual, expected).isBefore(expected) ? actual : throwIllegal(message);
        }
    }

    public static LocalDateTime before(LocalDateTime actual, LocalDateTime expected, Supplier supplier) {
        return notNull(actual, expected).isBefore(expected) ? actual : throwIllegal(supplier.get());
    }

    public static LocalDateTime after(LocalDateTime actual, LocalDateTime expected) {
        return notNull(actual, expected).isAfter(expected) ? actual : throwVal(actual, expected);
    }

    public static LocalDateTime after(LocalDateTime actual, LocalDateTime expected, String message) {
        if (message == null) {
            return after(actual, expected);
        } else {
            return notNull(actual, expected).isAfter(expected) ? actual : throwIllegal(message);
        }
    }

    public static LocalDateTime after(LocalDateTime actual, LocalDateTime expected, Supplier supplier) {
        return notNull(actual, expected).isAfter(expected) ? actual : throwIllegal(supplier.get());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy