package com.muyu.rule.common.scan;

import com.muyu.rule.common.load.JavaBinaryClassLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FilenameFilter;

/**
 * @Author：张承志
 * @Package：com.muyu.rule.server.scan
 * @Project：cloud-etl-rule
 * @name：JavaCodeScan
 * @Date：2024/8/22 21:11
 *
 * java 文件扫描器 扫描某路径下的源码,二进制文件
 */

public class JavaCodeScan {

    private static final Logger log = LoggerFactory.getLogger(JavaBinaryClassLoader.class);

 private static final String JAVA_SOURCE_SUF = ".java";
 private static final String JAVA_BINARY_SUF = ".class";

    /**
     * 扫描本路径下java所有源文件 并创建为file文件
      * @param filePath  文件路径
     * @return
     */

public static File[] javaSourceScanByPath(String filePath){

    return filterFileBySuf(filePath,JAVA_SOURCE_SUF);
}

    /**
     * 扫描本路径下java所有源文件 并创建为file文件
     * @param filePath  文件路径
     * @return
     */
public static File[] javaBinaryByPath(String filePath){

    return filterFileBySuf(filePath,JAVA_BINARY_SUF);
}

    /**
     * 校验是否为java文件 是 返回File 否 抛出异常
     * @param filePath
     * @return
     */
public static File isJavaSourceScanByPath(String filePath){
    File file = new File(filePath);
    if (file.isFile()){
        return file;
    }
    return null;
}




    /**
     *
     * @param filePath 文件路径
     * @param suf  扫描后缀
     * @return
     */
public static File[] filterFileBySuf(String filePath,String suf){

    File file = new File(filePath);
    File[] childFiles = file.listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            if (name.indexOf(suf) <= -1) {
                return false;
            } else {
                log.info("扫描到{}文件->{}", suf, name);

                return true;
            }

        }
    });

    return childFiles;
}


}
