net.sf.jasperreports.functions.standard.LogicalFunctions.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.jasperreports.functions.standard.LogicalFunctions.java

Source

/*
 * JasperReports - Free Java Reporting Library.
 * Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
 * http://www.jaspersoft.com
 *
 * Unless you have purchased a commercial license agreement from Jaspersoft,
 * the following license terms apply:
 *
 * This program is part of JasperReports.
 *
 * JasperReports is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JasperReports is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.jasperreports.functions.standard;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sf.jasperreports.functions.annotations.Function;
import net.sf.jasperreports.functions.annotations.FunctionCategories;
import net.sf.jasperreports.functions.annotations.FunctionParameter;
import net.sf.jasperreports.functions.annotations.FunctionParameters;

/**
 * This class should maintain all functions that allows logic decisions, and belong to the Logical category.
 * 
 * @author Massimo Rabbi (mrabbi@users.sourceforge.net)
 */
@FunctionCategories({ LogicalCategory.class })
public final class LogicalFunctions {

    private static final Log log = LogFactory.getLog(LogicalFunctions.class);

    // ===================== AND function ===================== //
    /**
     * Returns true if all arguments are considered true, false otherwise. Argument must be a logical result or a direct boolean value.
     */
    @Function("AND")
    @FunctionParameters({ @FunctionParameter("arguments") })
    public static Boolean AND(Boolean... arguments) {
        if (arguments.length == 0) {
            if (log.isDebugEnabled()) {
                log.debug("No arguments were specified.");
            }
            return null;
        }
        boolean result = true;
        for (Boolean arg : arguments) {
            result = result && arg;
            // Stops at first false argument
            if (!result)
                return false;
        }
        return result;
    }

    // ===================== FALSE function ===================== //
    /**
     * Returns the logical value FALSE.
     */
    @Function("FALSE")
    public static Boolean FALSE() {
        return Boolean.FALSE;
    }

    // ===================== TRUE function ===================== //
    /**
     * Returns the logical value TRUE.
     */
    @Function("TRUE")
    public static Boolean TRUE() {
        return Boolean.TRUE;
    }

    // ===================== NOT function ===================== //
    /**
     * Returns the negation of the specified boolean expression.
     */
    @Function("NOT")
    @FunctionParameters({ @FunctionParameter("boolValue") })
    public static Boolean NOT(Boolean boolValue) {
        if (boolValue == null) {
            if (log.isDebugEnabled()) {
                log.debug("Argument can not be null.");
            }
            return null;
        } else {
            return !boolValue;
        }
    }

    // ===================== OR function ===================== //
    /**
     * Returns true if any of the arguments is considered true, false otherwise. Argument must be a logical result or a direct boolean value.
     */
    @Function("OR")
    @FunctionParameters({ @FunctionParameter("arguments") })
    public static Boolean OR(Boolean... arguments) {
        if (arguments.length == 0) {
            if (log.isDebugEnabled()) {
                log.debug("No arguments were specified.");
            }
            return null;
        }
        boolean result = false;
        for (Boolean arg : arguments) {
            result = result || arg;
            // Stops at first true argument
            if (result)
                return true;
        }
        return result;
    }

    // ===================== IF function ===================== //
    /**
     * Returns one of two values, depending on a test condition.
     */
    @Function("IF")
    @FunctionParameters({ @FunctionParameter("test"), @FunctionParameter("value1"), @FunctionParameter("value2") })
    public static Object IF(Boolean test, Object value1, Object value2) {
        if (test == null) {
            if (log.isDebugEnabled()) {
                log.debug("Test condition can not be null.");
            }
            return null;
        }
        return test ? value1 : value2;
    }

    // ===================== EQUALS function ===================== //
    /**
     * Checks if the two specified objects are equal.
     */
    @Function("EQUALS")
    @FunctionParameters({ @FunctionParameter("obj1"), @FunctionParameter("obj2") })
    public static Boolean EQUALS(Object obj1, Object obj2) {
        if (obj1 != null) {
            return obj1.equals(obj2);
        } else if (obj2 != null) {
            return obj2.equals(obj1);
        }
        return true; // both null
    }
}