规则文件测试类

package com.ideal.crm.modelconvert.ruleengine;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.junit.Test;

import com.ideal.crm.common.constants.Constant;
import com.ideal.crm.common.log.ILogger;
import com.ideal.crm.common.log.LoggerFactory;

public class DrlTest {
    private static final ILogger logger = LoggerFactory.getLogger(DrlTest.class);
    private String[] dirs = new String[]{"rules", "complete-rules", "dsync-rules"};

    @Test
    public void checkDrl() throws IOException {
        for (String dir : dirs) {
            List<String> drlErrors = new ArrayList<>();
            URL url = Thread.currentThread().getContextClassLoader().getResource(dir);
            handleDir(url.getPath(), drlErrors);
            if (!drlErrors.isEmpty()) {
                File file = new File("D:\\drlErrors_" + dir);
                if (file.exists())
                    file.delete();
                try {
                    file.createNewFile();
                    for (String drlError : drlErrors) {
                        FileUtils.writeStringToFile(file, drlError + "\n\n", true);
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    private void handleDir(String dir, List<String> drlErrors) throws IOException {
        File drlFileDir = new File(URLDecoder.decode(dir, Constant.CHAR_ENCODING));
        File[] files = drlFileDir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                handleDir(file.getPath(), drlErrors);
            } else if (file.isFile()) {
                logger.debug(file.getName());
                KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
                InputStream is = new FileInputStream(file);
                kb.add(ResourceFactory.newInputStreamResource(is), ResourceType.DRL);
                if (kb.hasErrors()) {
                    drlErrors.add("Errors in the rules:\ndrl=" + file.getName() + ", \nerrors=" + kb.getErrors().toString());
                }
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值