Java tutorial
/* * 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); } }