br.com.nordestefomento.jrimum.utilix.ObjectUtil.java Source code

Java tutorial

Introduction

Here is the source code for br.com.nordestefomento.jrimum.utilix.ObjectUtil.java

Source

/*
 * Copyright 2008 JRimum Project
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
 * applicable law or agreed to in writing, software distributed under the
 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
 * OF ANY KIND, either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 * 
 * Created at: 30/03/2008 - 18:02:40
 * 
 * ================================================================================
 * 
 * Direitos autorais 2008 JRimum Project
 * 
 * Licenciado sob a Licena Apache, Verso 2.0 ("LICENA"); voc no pode usar
 * esse arquivo exceto em conformidade com a esta LICENA. Voc pode obter uma
 * cpia desta LICENA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
 * haja exigncia legal ou acordo por escrito, a distribuio de software sob
 * esta LICENA se dar COMO EST??, SEM GARANTIAS OU CONDIES DE QUALQUER
 * TIPO, sejam expressas ou tcitas. Veja a LICENA para a redao especfica a
 * reger permisses e limitaes sob esta LICENA.
 * 
 * Criado em: 30/03/2008 - 18:02:40
 * 
 */

package br.com.nordestefomento.jrimum.utilix;

import java.io.Serializable;
import java.util.Collection;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.log4j.Logger;

/**
 * <p>
 * Classe utilitria para validaes de objetos em geral, como verificaes
 * de objetos nulos, colees/arrays vazios.
 * </p>
 * <p>
 * Fornece mtodos booleanos e mtodos que verificam se o valor do objeto est de acordo
 * com o desejado e, caso no estejam, lanam exceo.
 * </p>
 * 
 * @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
 * @author Rmulo Augusto
 * 
 * @since 0.2
 * 
 * @version 0.2
 */
public class ObjectUtil implements Serializable {

    private static final long serialVersionUID = -6790981191128287923L;

    private static Logger log = Logger.getLogger(ObjectUtil.class);

    /**
     * Construtor privado para previnir a instanciao.
     * 
     * @throws AssertionError caso haja alguma tentativa de utilizao deste construtor.
     */
    private ObjectUtil() {
        throw new AssertionError();
    }

    /**
     * <p>
     * Mtodo privado para fins de reutilizao de cdigo. Deve ser utilizado para verificar se 
     * colees ou mapas so vazios.
     * </p>
     * <p>
     * Verifica se o objeto passado por parmetro  <code>null</code> ou se tem tamanho zero. Para verificar
     * o tamanho, primeiro realiza um "cast" para <code>Collection</code>, caso seja instncia de <code>Collection</code>,
     * ou para <code>Map</code>, caso seja instncia de <code>Map</code>, e utiliza o mtodo "size()".
     * </p>
     * 
     * @param object - Objeto analisado
     * @return isNull(object) || size == 0;
     */
    private static boolean isEmpty(Object object) {

        int size = 0;

        if (object instanceof Collection<?>) {
            size = ((Collection<?>) object).size();

        } else if (object instanceof Map<?, ?>) {
            size = ((Map<?, ?>) object).size();
        }

        return isNull(object) || size == 0;
    }

    /**
     * <p>
     * Mtodo privado para fins de reutilizao de cdigo. Deve ser utilizado para verificar se 
     * colees ou mapas so vazios.
     * </p>
     * <p>
     * Verifica se o objeto passado por parmetro  <code>null</code> ou se tem tamanho zero.
     * Para verificar o tamanho, primeiro realiza um "cast" para <code>Collection</code>, caso seja instncia de <code>Collection</code>,
     * ou para <code>Map</code>, caso seja instncia de <code>Map</code>, e utiliza o mtodo "size()".
     * </p>
     * 
     * @param object - Objeto analisado
     * @param message - Mensagem utilizada na exceo
     * 
     * @throws IllegalArgumentException Caso o objeto no seja vazio 
     */
    private static void checkEmpty(Object object, String message) {

        if (isNotEmpty(object)) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * <p>
     * Mtodo privado para fins de reutilizao de cdigo. Deve ser utilizado para verificar se 
     * colees ou mapas no so vazios.
     * </p>
     * <p>
     * Verifica se o objeto passado por parmetro <strong>no</strong>  <code>null</code> ou se tem tamanho zero.
     * Para verificar o tamanho, primeiro realiza um "cast" para <code>Collection</code>, caso seja instncia de <code>Collection</code>,
     * ou para <code>Map</code>, caso seja instncia de <code>Map</code>, e utiliza o mtodo "size()".
     * </p>
     * <p>
     * Caso o objeto seja <code>null</code>, lana <code>NullPointerException</code> com a mensagem informada no
     * parmetro <code>messageNullPointer</code> (primeiro parmetro String). Caso o objeto no seja 
     * <code>null</code> e no possua elementos, lana <code>IllegalArgumentException</code> com a mensagem 
     * informada no parmetro <code>messageIllegalArgument</code> (segundo parmetro String).
     * </p>
     * 
     * @param object - Objeto analisado
     * @param messageNullPointer - Mensagem utiliada na exceo <code>NullPointerException</code>
     * @param messageIllegalArgument - Mensagem utiliada na exceo <code>IllegalArgumentException</code>
     */
    private static void checkNotEmpty(Object object, String messageNullPointer, String messageIllegalArgument) {

        if (isNull(object)) {
            throw new NullPointerException(messageNullPointer);
        }

        if (isEmpty(object)) {
            throw new IllegalArgumentException(messageIllegalArgument);
        }
    }

    /**
     * <p>
     * Verifica a referncia ao objeto e lana uma exceo para casos onde a
     * referncia  nula inclundo na mensagem de exceo o nome do parmetro
     * passado.
     * </p>
     * 
     * @param object
     * @param name
     * 
     * @return (object == null ? true : false)
     * 
     * @throws IllegalArgumentException
     * 
     * @see #isNotNull(Object, String)
     * 
     * @since 0.2
     */
    @Deprecated
    public static boolean isNull(Object object, String name) throws IllegalArgumentException {

        boolean is = true;

        if (object != null) {
            is = false;

        } else {

            IllegalArgumentException e = new IllegalArgumentException(
                    (name != null ? name : "Objeto ") + " invlido : [" + object + "]!");

            log.error(StringUtils.EMPTY, e);

            throw e;
        }

        return is;
    }

    /**
     * <p>
     * Verifica a referncia ao objeto e lana uma exceo para casos onde a
     * referncia  nula inclundo na mensagem de exceo o nome do parmetro
     * passado.
     * </p>
     * 
     * <p>
     *  o mesmo que usar <code>!isNull(obj1,"obj1")</code> a diferena  que
     * utiliza-se um smbolo <code>!</code> a menos.
     * </p>
     * 
     * @param object
     * @param name
     * 
     * @return (object != null ? true : false)
     * 
     * @throws IllegalArgumentException
     * 
     * @see #isNull(Object, String)
     * 
     * @since 0.2
     */
    @Deprecated
    public static boolean isNotNull(Object object, String name) throws IllegalArgumentException {
        return !isNull(object, name);
    }

    /**
     * <p>
     * Verifica se o objeto passado por parmetro  <code>null</code>.
     * </p>
     * 
     * @param object - Objeto analisado
     * 
     * @return (object == null ? true : false)
     * 
     * @since 0.2
     */
    public static boolean isNull(Object object) {
        return (object == null);
    }

    /**
     * <p>
     * Verifica se o objeto passado por parmetro <strong>no</strong>  <code>null</code>. 
     * </p>
     * <p>
     *  o mesmo que usar o mtodo <code>isNull</code> da forma <code>!isNull(obj)</code>, porm
     * de forma mais legvel.
     * </p>
     * 
     * @param object - Objeto analisado
     * 
     * @return (object != null ? true : false)
     * 
     * @see #isNull(Object)
     * 
     * @since 0.2
     */
    public static boolean isNotNull(Object object) {
        return !isNull(object);
    }

    /**
     * <p>
     * Verifica se existe uma referncia ao objeto dado.
     * </p>
     * 
     * @param object - Objeto analisado
     * 
     * @return (object != null ? true : false)
     * 
     * @see #isNotNull(Object)
     * 
     * @since 0.2
     */
    public static boolean exists(Object object) {
        return isNotNull(object);
    }

    /**
     * <p>
     * Verifica se a <code>Collection</code> passada por parmetro  <code>null</code> ou 
     * <strong>no</strong> possui elementos. 
     * </p>
     * 
     * @param collection - Instncia de <code>Collection</code> analisada
     * @return (collection == null || collection.size() == 0 ? true : false)
     * 
     * @since 0.2
     */
    public static boolean isEmpty(Collection<?> collection) {
        return isEmpty((Object) collection);
    }

    /**
     * <p>
     * Verifica se a <code>Collection</code> passada por parmetro <strong>no</strong>  <code>null</code> 
     * e possui elementos. 
     * </p>
     * 
     * @param collection - Instncia de <code>Collection</code> analisada
     * @return (collection != null && collection.size() > 0 ? true : false)
     * 
     * @see #isEmpty(Collection)
     * 
     * @since 0.2
     */
    public static boolean isNotEmpty(Collection<?> collection) {
        return isNotEmpty((Object) collection);
    }

    /**
     * <p>
     * Verifica se o <code>Map</code> passado por parmetro  <code>null</code> ou 
     * <strong>no</strong> possui elementos. 
     * </p>
     * 
     * @param map - Instncia de <code>Map</code> analisada
     * @return (map == null || map.size() == 0 ? true : false)
     * 
     * @since 0.2
     */
    public static boolean isEmpty(Map<?, ?> map) {
        return isEmpty((Object) map);
    }

    /**
     * <p>
     * Verifica se o <code>Map</code> passado por parmetro <strong>no</strong>  <code>null</code> 
     * e possui elementos. 
     * </p>
     * 
     * @param map - Instncia de <code>Map</code> analisada
     * @return (map != null && map.size() > 0 ? true : false)
     * 
     * @see #isEmpty(Map)
     * 
     * @since 0.2
     */
    public static boolean isNotEmpty(Map<?, ?> map) {
        return isNotEmpty((Object) map);
    }

    /**
     * <p>
     * Mtodo privado para fins de reutilizao de cdigo. Deve ser utilizado para verificar se 
     * colees ou mapas no so vazios.
     * </p>
     * <p>
     * Verifica se o objeto passado por parmetro <strong>no</strong>  <code>null</code> ou se tem tamanho zero.
     * Para verificar o tamanho, primeiro realiza um "cast" para <code>Collection</code>, caso seja instncia de <code>Collection</code>,
     * ou para <code>Map</code>, caso seja instncia de <code>Map</code>, e utiliza o mtodo "size()".
     * </p>
     * 
     * @param object - Objecto analisado
     * @return (object != null && size > 0 ? true : false)
     * 
     * @since 0.2
     */
    public static boolean isNotEmpty(Object object) {
        return !isEmpty(object);
    }

    /**
     * <p>
     * Verifica se o objeto  nulo e lana <code>IllegalArgumentException</code>, com a mensagem 
     * informada, caso <strong>no</strong> seja.
     * </p>
     * 
     * @thows IllegalArgumentException - Caso o objeto <strong>no</strong> seja <code>null</code>.
     * 
     * @see #isNull(Object)
     * @see #isNotNull(Object)
     * 
     * @since 0.2
     * 
     * @param object - Objeto analisado
     * @param message - Mensagem utilizada na exceo
     */
    public static void checkNull(Object object, String message) {

        if (isNotNull(object)) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * <p>
     * Verifica se o objeto  nulo e lana <code>IllegalArgumentException</code> caso 
     * <strong>no</strong> seja.
     * </p>
     * 
     * @param object - Objeto analisado
     * 
     * @thows IllegalArgumentException - Caso o objeto <strong>no</strong> seja <code>null</code>.
     * 
     * @see #checkNull(Object, String)
     * @see #isNull(Object)
     * @see #isNotNull(Object)
     * 
     * @since 0.2
     */
    public static void checkNull(Object object) {
        checkNull(object, "Objeto no nulo. Valor [" + object + "]");
    }

    /**
     * <p>
     * Verifica se o objeto <strong>no</strong>  nulo e lana <code>NullPointerException</code>, com
     * a mensagem informada, caso seja.
     * </p>
     * 
     * @param object - Objeto analisado
     * @param message - Mensagem utilizada na exceo
     * 
     * @thows NullPointerException - Caso o objeto seja <code>null</code>.
     * 
     * @see #isNull(Object)
     * @see #isNotNull(Object)
     * 
     * @since 0.2
     */
    public static void checkNotNull(Object object, String message) {

        if (isNull(object)) {
            throw new NullPointerException(message);
        }
    }

    /**
     * <p>
     * Verifica se o objeto <strong>no</strong>  nulo e lana <code>NullPointerException</code> 
     * caso seja.
     * </p>
     * 
     * @param object - Objeto analisado
     * 
     * @thows NullPointerException - Caso o objeto seja <code>null</code>.
     * 
     * @see #checkNotNull(Object, String)
     * @see #isNull(Object)
     * @see #isNotNull(Object)
     * 
     * @since 0.2
     */
    public static void checkNotNull(Object object) {
        checkNotNull(object, "Objeto nulo");
    }

    /**
     * <p>
     * Verifica se a <code>Collection</code> passado por parmetro  <code>null</code> ou 
     * <strong>no</strong> possui elementos e lana exceo, com a mensagem informada, 
     * caso no preencha estes requisitos.
     * </p>
     * 
     * @param collection - Instncia de <code>Collection</code> analisada
     * @param message - Mensagem utilizada na exceo
     * 
     * @thows IllegalArgumentException - Caso a coleo <strong>no</strong> seja <code>null</code> e possua elementos.
     * 
     * @see #isEmpty(Collection)
     * @see #isNotEmpty(Collection)
     * 
     * @since 0.2
     */
    public static void checkEmpty(Collection<?> collection, String message) {
        checkEmpty((Object) collection, message);
    }

    /**
     * <p>
     * Verifica se a <code>Collection</code> passada por parmetro  <code>null</code> ou 
     * <strong>no</strong> possui elementos e lana exceo caso no preencha estes requisitos.
     * </p>
     * 
     * @param collection - Instncia de <code>Collection</code> analisada
     * 
     * @thows IllegalArgumentException - Caso a coleo <strong>no</strong> seja <code>null</code> e possua elementos.
     * 
     * @see #checkEmpty(Collection, String)
     * @see #isEmpty(Collection)
     * @see #isNotEmpty(Collection)
     * 
     * @since 0.2
     */
    public static void checkEmpty(Collection<?> collection) {
        checkEmpty(collection, "Collection no nulo e com elementos. Valor [" + collection + "]");
    }

    /**
     * <p>
     * Verifica se a <code>Collection</code> passada por parmetro <strong>no</strong>  <code>null</code> e 
     * possui elementos e lana exceo, com a mensagem informada, caso no preencha estes requisitos.
     * </p>
     * 
     * @param collection - Instncia de <code>Collection</code> analisada
     * @param message - Mensagem utiliada na exceo
     * 
     * @throws NullPointerException - Caso a coleo seja <code>null</code>.
     * @thows IllegalArgumentException - Caso a coleo <strong>no</strong> possua elementos.
     * 
     * @see #isEmpty(Collection)
     * @see #isNotEmpty(Collection)
     * 
     * @since 0.2
     */
    public static void checkNotEmpty(Collection<?> collection, String message) {
        checkNotEmpty(collection, message, message);
    }

    /**
     * <p>
     * Verifica se a <code>Collection</code> passada por parmetro <strong>no</strong>  <code>null</code> e 
     * possui elementos e lana exceo caso no preencha estes requisitos.
     * </p>
     * 
     * @param map - Instncia de <code>Collection</code> analisada
     * 
     * @throws NullPointerException - Caso a coleo seja <code>null</code>.
     * @thows IllegalArgumentException - Caso a coleo <strong>no</strong> possua elementos.
     * 
     * @see #checkNotEmpty(Collection, String)
     * @see #isEmpty(Collection)
     * @see #isNotEmpty(Collection)
     * 
     * @since 0.2
     */
    public static void checkNotEmpty(Collection<?> collection) {
        checkNotEmpty(collection, "Objeto nulo", "Collection sem elementos");
    }

    /**
     * <p>
     * Verifica se o <code>Map</code> passado por parmetro  <code>null</code> ou 
     * <strong>no</strong> possui elementos e lana exceo, com a mensagem informada, 
     * caso no preencha estes requisitos.
     * </p>
     * 
     * @param map - Instncia de <code>Map</code> analisada
     * @param message - Mensagem utilizada na exceo
     * 
     * @thows IllegalArgumentException - Caso o mapa <strong>no</strong> seja <code>null</code> e possua elementos.
     * 
     * @see #isEmpty(Map)
     * @see #isNotEmpty(Map)
     * 
     * @since 0.2
     */
    public static void checkEmpty(Map<?, ?> map, String message) {
        checkEmpty((Object) map, message);
    }

    /**
     * <p>
     * Verifica se o <code>Map</code> passado por parmetro  <code>null</code> ou 
     * <strong>no</strong> possui elementos e lana exceo caso no preencha estes requisitos.
     * </p>
     * 
     * @param map - Instncia de <code>Map</code> analisada
     * 
     * @thows IllegalArgumentException - Caso o mapa <strong>no</strong> seja <code>null</code> e possua elementos.
     * 
     * @see #checkEmpty(Map, String)
     * @see #isEmpty(Map)
     * @see #isNotEmpty(Map)
     * 
     * @since 0.2
     */
    public static void checkEmpty(Map<?, ?> map) {
        checkEmpty(map, "Map no nulo e com elementos. Valor [" + map + "]");
    }

    /**
     * <p>
     * Verifica se o <code>Map</code> passado por parmetro <strong>no</strong>  <code>null</code> e 
     * possui elementos e lana exceo, com a mensagem informada, caso no preencha estes requisitos.
     * </p>
     * 
     * @param map - Instncia de <code>Map</code> analisada
     * @param message - Mensagem utiliada na exceo
     * 
     * @throws NullPointerException - Caso o mapa seja <code>null</code>.
     * @thows IllegalArgumentException - Caso o mapa <strong>no</strong> possua elementos.
     * 
     * @see #isEmpty(Map)
     * @see #isNotEmpty(Map)
     * 
     * @since 0.2
     */
    public static void checkNotEmpty(Map<?, ?> map, String message) {
        checkNotEmpty(map, message, message);
    }

    /**
     * <p>
     * Verifica se o <code>Map</code> passado por parmetro <strong>no</strong>  <code>null</code> e 
     * possui elementos e lana exceo caso no preencha estes requisitos.
     * </p>
     * 
     * @param map - Instncia de <code>Map</code> analisada
     * 
     * @throws NullPointerException - Caso o mapa seja <code>null</code>.
     * @thows IllegalArgumentException - Caso o mapa <strong>no</strong> possua elementos.
     * 
     * @see #checkNotEmpty(Map, String)
     * @see #isEmpty(Map)
     * @see #isNotEmpty(Map)
     * 
     * @since 0.2
     */
    public static void checkNotEmpty(Map<?, ?> map) {
        checkNotEmpty(map, "Objeto nulo", "Map sem elementos");
    }

    /**
     * Exibe os valores de instncia para um objeto JRimum.
     * 
     * @see org.apache.commons.lang.builder.ToStringBuilder#reflectionToString
     * 
     * @since 0.2
     * 
     * @see java.lang.Object#toString()
     */
    public static String toString(Object obj) {
        return "JRimumObject: " + ToStringBuilder.reflectionToString(obj);
    }
}