package org.wcs.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

public class AppBeanUtils {

    /**
     * 判断对象所有属性是否为空 ？
     * @param obj 对象
     * @return 结果
     */
    public static boolean isAllPropertyNull(Object obj) {
        if (obj == null) {
            return true;
        }
        for (java.lang.reflect.Field field : obj.getClass().getDeclaredFields()) {
            field.setAccessible(true);
            try {
                if (field.get(obj) != null) {
                    return false;
                }
            } catch (IllegalAccessException e) {
               return false;
            }
        }
        return true;
    }



    /**
     * <p>带回调参数的集合数据的拷贝</p>
     *
     * @param sources  数据源类
     * @param target   目标类::new (eg: UserVO::new)
     * @return List<T> List<Bean>
     */
    public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target) {
        List<T> list = new ArrayList<>(sources.size());
        for (S source : sources) {
            T t = target.get();
            copyProperties(source, t);
            list.add(t);
        }
        return list;
    }

    /**
     * BeanCopy
     * @param source 源对象
     * @param target 目标对象
     */
    public static <T, V> void copyProperties(T source, V target) {
        if (source == null || target == null) {
            return;
        }
        org.springframework.beans.BeanUtils.copyProperties(source, target);
    }
}
