001package top.cenze.rule.config;
002
003import org.kie.api.KieBase;
004import org.kie.api.builder.KieFileSystem;
005import org.kie.api.runtime.KieContainer;
006import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
007import org.springframework.context.annotation.Bean;
008import org.springframework.context.annotation.Configuration;
009import top.cenze.rule.utils.KieUtil;
010
011import java.io.IOException;
012
013/**
014 * @desc: 规则配置
015 * @author: chengze
016 * @createByDate: 2023/8/3 13:37
017 */
018//@Configuration
019public class DroolsConfig {
020
021    //指定规则文件存放的目录
022    public static final String RULES_PATH = "rules/";
023
024    /**
025     * 内存文件系统
026     * @return
027     * @throws IOException
028     */
029    @Bean
030    @ConditionalOnMissingBean
031    public KieFileSystem kieFileSystem() throws IOException {
032        return KieUtil.getKieFileSystem();
033//        // 创建文件系统
034//        KieFileSystem kieFileSystem = KieUtil.getKieServices().newKieFileSystem();
035//
036//        // 创建资源解释器
037//        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
038//
039//        // 获取resource下RULES_PATH下所有资源文件
040//        Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*");
041//
042//        String path = null;
043//        for (Resource file : files) {
044//            path = RULES_PATH + file.getFilename();
045//
046//            // 将资源文件载入至内存文件系统中
047//            kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));
048//        }
049//
050//        return kieFileSystem;
051    }
052
053    /**
054     * 内存容器
055     * @return
056     * @throws IOException
057     */
058    @Bean
059    @ConditionalOnMissingBean
060    public KieContainer kieContainer() throws IOException {
061        return KieUtil.getKieContainer();
062//        KieRepository kieRepository = KieUtil.getKieServices().getRepository();
063//        kieRepository.addKieModule(kieRepository::getDefaultReleaseId);
064//        KieBuilder kieBuilder = KieUtil.getKieServices().newKieBuilder(kieFileSystem());
065//        kieBuilder.buildAll();
066//        KieContainer kieContainer = KieUtil.getKieServices().newKieContainer(kieRepository.getDefaultReleaseId());
067//
068//        KieUtil.setKieContainer(kieContainer);
069//        return kieContainer;
070    }
071
072    /**
073     * 内存仓库
074     * @return
075     * @throws IOException
076     */
077    @Bean
078    @ConditionalOnMissingBean
079    public KieBase kieBase() throws IOException {
080        return KieUtil.getKieBase();
081//        KieBase kieBase = kieContainer().getKieBase();
082//
083//        KieUtil.setKieBase(kieBase);
084//        return kieBase;
085    }
086
087//    @Bean
088//    @ConditionalOnMissingBean
089//    public KieSession kieSession() throws IOException {
090//        KieSession kieSession = kieBase().newKieSession();
091//
092//        return kieSession;
093//    }
094//
095//    @Bean
096//    @ConditionalOnMissingBean
097//    public KModuleBeanFactoryPostProcessor kiePostProcessor() {
098//        return new KModuleBeanFactoryPostProcessor();
099//    }
100}