/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2002-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowledgement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgement may appear in the software itself, * if and wherever such third-party acknowledgements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */ package org.apache.commons.lang; import org.apache.commons.lang.math.NumberUtils; /** *

Operations on boolean primitives and Boolean objects.

* *

This class tries to handle null input gracefully. * An exception will not be thrown for a null input. * Each method documents its behaviour in more detail.

* * @author Stephen Colebourne * @author Matthew Hawthorne * @author Gary Gregory * @since 2.0 * @version $Id: BooleanUtils.java,v 1.1 2012/08/30 16:24:42 marcin Exp $ */ public class BooleanUtils { /** *

BooleanUtils instances should NOT be constructed in standard programming. * Instead, the class should be used as BooleanUtils.toBooleanObject(true);.

* *

This constructor is public to permit tools that require a JavaBean instance * to operate.

*/ public BooleanUtils() { } // Boolean utilities //-------------------------------------------------------------------------- /** *

Negates the specified boolean.

* *

If null is passed in, null will be returned.

* * @param bool the Boolean to negate, may be null * @return the negated Boolean, or null if null input */ public static Boolean negate(Boolean bool) { if (bool == null) { return null; } return (bool.booleanValue() ? Boolean.FALSE : Boolean.TRUE); } // boolean Boolean methods //----------------------------------------------------------------------- /** *

Boolean factory that avoids creating new Boolean objecs all the time.

* *

This method was added to JDK1.4 but is available here for earlier JDKs.

* * @param bool the boolean to convert * @return Boolean.TRUE or Boolean.FALSE as appropriate */ public static Boolean toBooleanObject(boolean bool) { return (bool ? Boolean.TRUE : Boolean.FALSE); } /** *

Converts a Boolean to a boolean handling null * by returning false.

* * @param bool the boolean to convert * @return true or false, * null returns false */ public static boolean toBoolean(Boolean bool) { if (bool == null) { return false; } return (bool.booleanValue() ? true : false); } /** *

Converts a Boolean to a boolean handling null.

* * @param bool the boolean to convert * @param valueIfNull the boolean value to return if null * @return true or false */ public static boolean toBooleanDefaultIfNull(Boolean bool, boolean valueIfNull) { if (bool == null) { return valueIfNull; } return (bool.booleanValue() ? true : false); } // Integer to Boolean methods //----------------------------------------------------------------------- /** *

Converts an int to a boolean using the convention that zero * is false.

* * @param value the int to convert * @return true if non-zero, false * if zero */ public static boolean toBoolean(int value) { return (value == 0 ? false : true); } /** *

Converts an int to a Boolean using the convention that zero * is false.

* * @param value the int to convert * @return Boolean.TRUE if non-zero, Boolean.FALSE if zero, * null if null */ public static Boolean toBooleanObject(int value) { return (value == 0 ? Boolean.FALSE : Boolean.TRUE); } /** *

Converts an Integer to a Boolean using the convention that zero * is false.

* *

null will be converted to null.

* * @param value the Integer to convert * @return Boolean.TRUE if non-zero, Boolean.FALSE if zero, * null if null input */ public static Boolean toBooleanObject(Integer value) { if (value == null) { return null; } return (value.intValue() == 0 ? Boolean.FALSE : Boolean.TRUE); } /** *

Converts an int to a boolean specifying the conversion values.

* * @param value the Integer to convert * @param trueValue the value to match for true * @param falseValue the value to match for false * @return true or false * @throws IllegalArgumentException if no match */ public static boolean toBoolean(int value, int trueValue, int falseValue) { if (value == trueValue) { return true; } else if (value == falseValue) { return false; } // no match throw new IllegalArgumentException("The Integer did not match either specified value"); } /** *

Converts an Integer to a boolean specifying the conversion values.

* * @param value the Integer to convert * @param trueValue the value to match for true, * may be null * @param falseValue the value to match for false, * may be null * @return true or false * @throws IllegalArgumentException if no match */ public static boolean toBoolean(Integer value, Integer trueValue, Integer falseValue) { if (value == null) { if (trueValue == null) { return true; } else if (falseValue == null) { return false; } } else if (value.equals(trueValue)) { return true; } else if (value.equals(falseValue)) { return false; } // no match throw new IllegalArgumentException("The Integer did not match either specified value"); } /** *

Converts an int to a Boolean specifying the conversion values.

* * @param value the Integer to convert * @param trueValue the value to match for true * @param falseValue the value to match for false * @param nullValue the value to to match for null * @return Boolean.TRUE, Boolean.FALSE, or null * @throws IllegalArgumentException if no match */ public static Boolean toBooleanObject(int value, int trueValue, int falseValue, int nullValue) { if (value == trueValue) { return Boolean.TRUE; } else if (value == falseValue) { return Boolean.FALSE; } else if (value == nullValue) { return null; } // no match throw new IllegalArgumentException("The Integer did not match any specified value"); } /** *

Converts an Integer to a Boolean specifying the conversion values.

* * @param value the Integer to convert * @param trueValue the value to match for true, * may be null * @param falseValue the value to match for false, * may be null * @param nullValue the value to to match for null, * may be null * @return Boolean.TRUE, Boolean.FALSE, or null * @throws IllegalArgumentException if no match */ public static Boolean toBooleanObject(Integer value, Integer trueValue, Integer falseValue, Integer nullValue) { if (value == null) { if (trueValue == null) { return Boolean.TRUE; } else if (falseValue == null) { return Boolean.FALSE; } else if (nullValue == null) { return null; } } else if (value.equals(trueValue)) { return Boolean.TRUE; } else if (value.equals(falseValue)) { return Boolean.FALSE; } else if (value.equals(nullValue)) { return null; } // no match throw new IllegalArgumentException("The Integer did not match any specified value"); } // Boolean to Integer methods //----------------------------------------------------------------------- /** *

Converts a boolean to an int using the convention that * zero is false.

* * @param bool the boolean to convert * @return one if true, zero if false */ public static int toInteger(boolean bool) { return (bool ? 1 : 0); } /** *

Converts a boolean to an Integer using the convention that * zero is false.

* * @param bool the boolean to convert * @return one if true, zero if false */ public static Integer toIntegerObject(boolean bool) { return (bool ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO); } /** *

Converts a Boolean to a Integer using the convention that * zero is false.

* *

null will be converted to null.

* * @param bool the Boolean to convert * @return one if Boolean.TRUE, zero if Boolean.FALSE, null if null */ public static Integer toIntegerObject(Boolean bool) { if (bool == null) { return null; } return (bool.booleanValue() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO); } /** *

Converts a boolean to an int specifying the conversion values.

* * @param bool the to convert * @param trueValue the value to return if true * @param falseValue the value to return if false * @return the appropriate value */ public static int toInteger(boolean bool, int trueValue, int falseValue) { return (bool ? trueValue : falseValue); } /** *

Converts a Boolean to an int specifying the conversion values.

* * @param bool the Boolean to convert * @param trueValue the value to return if true * @param falseValue the value to return if false * @param nullValue the value to return if null * @return the appropriate value */ public static int toInteger(Boolean bool, int trueValue, int falseValue, int nullValue) { if (bool == null) { return nullValue; } return (bool.booleanValue() ? trueValue : falseValue); } /** *

Converts a boolean to an Integer specifying the conversion values.

* * @param bool the to convert * @param trueValue the value to return if true, * may be null * @param falseValue the value to return if false, * may be null * @return the appropriate value */ public static Integer toIntegerObject(boolean bool, Integer trueValue, Integer falseValue) { return (bool ? trueValue : falseValue); } /** *

Converts a Boolean to an Integer specifying the conversion values.

* * @param bool the Boolean to convert * @param trueValue the value to return if true, * may be null * @param falseValue the value to return if false, * may be null * @param nullValue the value to return if null, * may be null * @return the appropriate value */ public static Integer toIntegerObject(Boolean bool, Integer trueValue, Integer falseValue, Integer nullValue) { if (bool == null) { return nullValue; } return (bool.booleanValue() ? trueValue : falseValue); } // String to Boolean methods //----------------------------------------------------------------------- /** *

Converts a String to a Boolean.

* *

'true', 'on' or 'yes' * (case insensitive) will return true. * 'false', 'off' or 'no' * (case insensitive) will return false. * Otherwise, null is returned.

* * @param str the String to check * @return the Boolean value of the string, * null if no match or null input */ public static Boolean toBooleanObject(String str) { if ("true".equalsIgnoreCase(str)) { return Boolean.TRUE; } else if ("false".equalsIgnoreCase(str)) { return Boolean.FALSE; } else if ("on".equalsIgnoreCase(str)) { return Boolean.TRUE; } else if ("off".equalsIgnoreCase(str)) { return Boolean.FALSE; } else if ("yes".equalsIgnoreCase(str)) { return Boolean.TRUE; } else if ("no".equalsIgnoreCase(str)) { return Boolean.FALSE; } // no match return null; } /** *

Converts a String to a Boolean throwing an exception if no match.

* * @param str the String to check * @param trueString the String to match for true * (case sensitive), may be null * @param falseString the String to match for false * (case sensitive), may be null * @param nullString the String to match for null * (case sensitive), may be null * @return the Boolean value of the string, * null if no match or null input */ public static Boolean toBooleanObject(String str, String trueString, String falseString, String nullString) { if (str == null) { if (trueString == null) { return Boolean.TRUE; } else if (falseString == null) { return Boolean.FALSE; } else if (nullString == null) { return null; } } else if (str.equals(trueString)) { return Boolean.TRUE; } else if (str.equals(falseString)) { return Boolean.FALSE; } else if (str.equals(nullString)) { return null; } // no match throw new IllegalArgumentException("The String did not match any specified value"); } // String to boolean methods //----------------------------------------------------------------------- /** *

Converts a String to a boolean.

* *

'true', 'on' or 'yes' * (case insensitive) will return true. Otherwise, * false is returned.

* * @param str the String to check * @return the boolean value of the string, false if no match */ public static boolean toBoolean(String str) { if ("true".equalsIgnoreCase(str)) { return true; } else if ("on".equalsIgnoreCase(str)) { return true; } else if ("yes".equalsIgnoreCase(str)) { return true; } // no match return false; } /** *

Converts a String to a Boolean throwing an exception if no match found.

* *

null is returned if there is no match.

* * @param str the String to check * @param trueString the String to match for true * (case sensitive), may be null * @param falseString the String to match for false * (case sensitive), may be null * @return the boolean value of the string * @throws IllegalArgumentException if the String doesn't match */ public static boolean toBoolean(String str, String trueString, String falseString) { if (str == null) { if (trueString == null) { return true; } else if (falseString == null) { return false; } } else if (str.equals(trueString)) { return true; } else if (str.equals(falseString)) { return false; } // no match throw new IllegalArgumentException("The String did not match either specified value"); } // Boolean to String methods //----------------------------------------------------------------------- /** *

Converts a Boolean to a String returning 'true', * 'false', or null.

* * @param bool the Boolean to check * @return 'true', 'false', * or null */ public static String toStringTrueFalse(Boolean bool) { return toString(bool, "true", "false", null); } /** *

Converts a Boolean to a String returning 'on', * 'off', or null.

* * @param bool the Boolean to check * @return 'on', 'off', * or null */ public static String toStringOnOff(Boolean bool) { return toString(bool, "on", "off", null); } /** *

Converts a Boolean to a String returning 'yes', * 'no', or null.

* * @param bool the Boolean to check * @return 'yes', 'no', * or null */ public static String toStringYesNo(Boolean bool) { return toString(bool, "yes", "no", null); } /** *

Converts a Boolean to a String returning one of the input Strings.

* * @param bool the Boolean to check * @param trueString the String to return if true, * may be null * @param falseString the String to return if false, * may be null * @param nullString the String to return if null, * may be null * @return one of the three input Strings */ public static String toString(Boolean bool, String trueString, String falseString, String nullString) { if (bool == null) { return nullString; } return (bool.booleanValue() ? trueString : falseString); } // boolean to String methods //----------------------------------------------------------------------- /** *

Converts a boolean to a String returning 'true' * or 'false'.

* * @param bool the Boolean to check * @return 'true', 'false', * or null */ public static String toStringTrueFalse(boolean bool) { return toString(bool, "true", "false"); } /** *

Converts a boolean to a String returning 'on' * or 'off'.

* * @param bool the Boolean to check * @return 'on', 'off', * or null */ public static String toStringOnOff(boolean bool) { return toString(bool, "on", "off"); } /** *

Converts a boolean to a String returning 'yes' * or 'no'.

* * @param bool the Boolean to check * @return 'yes', 'no', * or null */ public static String toStringYesNo(boolean bool) { return toString(bool, "yes", "no"); } /** *

Converts a boolean to a String returning one of the input Strings.

* * @param bool the Boolean to check * @param trueString the String to return if true, * may be null * @param falseString the String to return if false, * may be null * @return one of the two input Strings */ public static String toString(boolean bool, String trueString, String falseString) { return (bool ? trueString : falseString); } // xor methods // ---------------------------------------------------------------------- /** *

Performs an xor on a set of booleans.

* * @param array an array of booleans * @return true if the xor is successful. * @throws IllegalArgumentException if array is null * @throws IllegalArgumentException if array is empty. */ public static boolean xor(boolean[] array) { // Validates input if (array == null) { throw new IllegalArgumentException("The Array must not be null"); } else if (array.length == 0) { throw new IllegalArgumentException("Array is empty"); } // Loops through array, comparing each item int trueCount = 0; for (int i = 0; i < array.length; i++) { // If item is true, and trueCount is < 1, increments count // Else, xor fails if (array[i]) { if (trueCount < 1) { trueCount++; } else { return false; } } } // Returns true if there was exactly 1 true item return trueCount == 1; } /** *

Performs an xor on an array of Booleans.

* * @param array an array of Booleans * @return true if the xor is successful. * @throws IllegalArgumentException if array is null * @throws IllegalArgumentException if array is empty. * @throws IllegalArgumentException if array contains a null */ public static Boolean xor(Boolean[] array) { if (array == null) { throw new IllegalArgumentException("The Array must not be null"); } else if (array.length == 0) { throw new IllegalArgumentException("Array is empty"); } boolean[] primitive = null; try { primitive = ArrayUtils.toPrimitive(array); } catch (NullPointerException ex) { throw new IllegalArgumentException("The array must not conatin any null elements"); } return (xor(primitive) ? Boolean.TRUE : Boolean.FALSE); } }