package cn.com.galaxy.util;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author xu
*/
public class EntityNotEmptyUtil {
/**
* 判断一个实体对象是否为空
*
* @param entity 要检查的实体对象
* @return 如果实体对象的所有字段都为空则返回true,否则返回false
*/
public static boolean isEmpty(Object entity) {
if (entity == null) {
return true;
}
Set<Object> processedObjects = new HashSet<>();
Deque<Object> objectStack = new LinkedList<>();
objectStack.push(entity);
while (!objectStack.isEmpty()) {
Object currentObject = objectStack.pop();
if (processedObjects.contains(currentObject)) {
continue;
}
processedObjects.add(currentObject);
AtomicBoolean foundNotEmpty = new AtomicBoolean(false);
Class<?> clazz = currentObject.getClass();
while (clazz != null) {
for (Field field : clazz.getDeclaredFields()) {
if (Modifier.isStatic(field.getModifiers())) {
continue;
}
if (foundNotEmpty.get()) {
break;
}
field.setAccessible(true);
Object value = getFieldValue(field, currentObject);
if (value != null) {
if (isStringNotEmpty(value) || isCollectionNotEmpty(value) || isArrayNotEmpty(value) || isMapNotEmpty(value)) {
foundNotEmpty.set(true);
} else if (!isSimpleType(value))