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());
}
}
}
}
}
规则文件测试类
最新推荐文章于 2022-03-30 11:05:14 发布