001// Generated by delombok at Sat Feb 25 17:58:34 UTC 2023
002package io.cui.tools.base;
003
004/**
005 * Utility Class providing some boolean operations. In essence, it simplifies 'or' and 'and'
006 * operations.
007 * Some examples from the unit-tests:
008 *
009 * <pre>
010 *
011 * &#64;Test
012 * void shouldDetectAnyTrue() {
013 *     assertTrue(BooleanOperations.isAnyTrue(true));
014 *     assertTrue(BooleanOperations.isAnyTrue(true, true));
015 *     assertTrue(BooleanOperations.isAnyTrue(true, false));
016 *     assertFalse(BooleanOperations.isAnyTrue(false, false));
017 *     // Not really sensible, but defined contract -> Corner Case
018 *     assertFalse(BooleanOperations.isAnyTrue());
019 *     assertFalse(BooleanOperations.isAnyTrue(null));
020 * }
021 *
022 * &#64;Test
023 * void shouldDetectAnyFalse() {
024 *     assertFalse(BooleanOperations.isAnyFalse(true));
025 *     assertTrue(BooleanOperations.isAnyFalse(true, false));
026 *     assertTrue(BooleanOperations.isAnyFalse(false, false));
027 *     // Not really sensible, but defined contract -> Corner Case
028 *     assertFalse(BooleanOperations.isAnyFalse());
029 *     assertFalse(BooleanOperations.isAnyFalse(null));
030 * }
031 *
032 * &#64;Test
033 * void shouldDetectAllFalse() {
034 *     assertFalse(BooleanOperations.areAllFalse(true));
035 *     assertFalse(BooleanOperations.areAllFalse(true, false));
036 *     assertFalse(BooleanOperations.areAllFalse(true, true));
037 *     assertTrue(BooleanOperations.areAllFalse(false, false));
038 *     // Not really sensible, but defined contract -> Corner Case
039 *     assertFalse(BooleanOperations.areAllFalse());
040 *     assertFalse(BooleanOperations.areAllFalse(null));
041 * }
042 *
043 * &#64;Test
044 * void shouldDetectAllTrue() {
045 *     assertTrue(BooleanOperations.areAllTrue(true));
046 *     assertFalse(BooleanOperations.areAllTrue(true, false));
047 *     assertTrue(BooleanOperations.areAllTrue(true, true));
048 *     assertFalse(BooleanOperations.areAllTrue(false, false));
049 *     // Not really sensible, but defined contract -> Corner Case
050 *     assertTrue(BooleanOperations.areAllTrue());
051 *     assertTrue(BooleanOperations.areAllTrue(null));
052 * }
053 * </pre>
054 *
055 *
056 *
057 * @author Eugen Fischer
058 * @author Oliver Wolff
059 */
060public final class BooleanOperations {
061    private static boolean containsTrue(final boolean... parameter) {
062        if (isEmpty(parameter)) {
063            return false;
064        }
065        for (boolean element : parameter) {
066            if (element) {
067                return true;
068            }
069        }
070        return false;
071    }
072
073    private static boolean isEmpty(boolean[] parameter) {
074        return null == parameter || 0 == parameter.length;
075    }
076
077    private static boolean containsFalse(final boolean... parameter) {
078        if (isEmpty(parameter)) {
079            return false;
080        }
081        for (boolean element : parameter) {
082            if (!element) {
083                return true;
084            }
085        }
086        return false;
087    }
088
089    /**
090     * Shorthand for checking if at least one of the given booleans is {@code true}
091     *
092     * @param parameter ellipsis of boolean values
093     * @return {@code true} if one of parameters is {@code true}, {@code false} otherwise
094     */
095    public static boolean isAnyTrue(final boolean... parameter) {
096        return containsTrue(parameter);
097    }
098
099    /**
100     * Shorthand for checking if all the given booleans are {@code true}
101     *
102     * @param parameter ellipsis of boolean values
103     * @return {@code true} if all parameters are {@code true} or no parameter is given ratio: no
104     *         given false, {@code false} otherwise
105     */
106    public static boolean areAllTrue(final boolean... parameter) {
107        if (isEmpty(parameter)) {
108            return true;
109        }
110        return !containsFalse(parameter);
111    }
112
113    /**
114     * Shorthand for checking if all given booleans are {@code false}
115     *
116     * @param parameter ellipsis of boolean values
117     * @return {@code true} if all parameters are {@code false}, {@code true} otherwise.
118     *         {@code false} if no parameter is passed, ratio: no given false
119     */
120    public static boolean areAllFalse(final boolean... parameter) {
121        if (isEmpty(parameter)) {
122            return false;
123        }
124        return !containsTrue(parameter);
125    }
126
127    /**
128     * Shorthand for checking if at least one of the given booleans is {@code false}
129     *
130     * @param parameter ellipsis of boolean values
131     * @return {@code true} if one of parameters is {@code false}, {@code true} otherwise
132     */
133    public static boolean isAnyFalse(final boolean... parameter) {
134        return containsFalse(parameter);
135    }
136
137    /**
138     * @param value to be checked
139     * @return true, if the given value represents a boolean value i.e. "true" or "false" ignoring
140     *         case.
141     */
142    public static boolean isValidBoolean(String value) {
143        return Boolean.TRUE.toString().equalsIgnoreCase(value) || Boolean.FALSE.toString().equalsIgnoreCase(value);
144    }
145
146    @java.lang.SuppressWarnings("all")
147    @lombok.Generated
148    private BooleanOperations() {
149        throw new java.lang.UnsupportedOperationException("This is a utility class and cannot be instantiated");
150    }
151}