package com.ruoyi.platform.utils;

import com.ruoyi.common.core.utils.bean.BeanUtils;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;

import java.util.HashSet;
import java.util.Set;

public class BeansUtils {

    // 获取一个 Java 对象中所有为空的属性名称。：
    public static String[] getNullPropertyNames(Object source) {
        // 创建一个 BeanWrapper 对象，参数为给定的 Java 对象
        final BeanWrapper src = new BeanWrapperImpl(source);
        // 获取该对象所有属性描述符
        java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
        // 创建一个集合，用于存储为空的属性名称
        Set<String> emptyNames = new HashSet<String>();
        // 遍历所有属性描述符
        for(java.beans.PropertyDescriptor pd : pds) {
            // 获取属性值
            Object srcValue = src.getPropertyValue(pd.getName());
            // 如果属性值为空，则将属性名称添加到集合中
            if (srcValue == null) emptyNames.add(pd.getName());
        }
        // 创建一个字符串数组，用于存储为空的属性名称
        String[] result = new String[emptyNames.size()];
        // 将为空的属性名称存储到字符串数组中
        return emptyNames.toArray(result);
    }


    public static void copyPropertiesIgnoreNull(Object src, Object target){
        // 使用 BeanUtils 工具类将源对象中的非空属性复制到目标对象中
        BeanUtils.copyProperties(src, target, getNullPropertyNames(src));
    }
}
