下面列出了org.junit.jupiter.api.function.ThrowingSupplier#org.kie.api.io.ResourceType 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Test
public void testParallelBuild() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
StringBuilder sb = new StringBuilder();
int rc = 0;
for (Class<?> c : classes) {
sb.append("rule \"rule_" + rc++ + "\"\n");
sb.append(" when\n");
sb.append(" a : " + c.getName() + "()\n");
sb.append(" then\n");
sb.append(" System.out.print(\".\");\n");
sb.append("end\n");
sb.append("\n");
}
kbuilder.add(ResourceFactory.newByteArrayResource(sb.toString().getBytes(StandardCharsets.UTF_8)), ResourceType.DRL);
}
private void testScenarioBindString(final String drl, final String... expectedResults) {
final KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
.build()
.newKieSession();
final List<String> list = new ArrayList<>();
ksession.setGlobal( "list", list );
final Man bob = new Man( "Bob", 40 );
final Woman alice = new Woman( "Alice", 38 );
ksession.insert(bob);
ksession.insert(alice);
ksession.fireAllRules();
assertThat(list).containsExactlyInAnyOrder(expectedResults);
}
@Test
public void testRedeclareWithInterfaceExtensionAndOverride() {
final String s1 = "package test;\n" +
"declare trait " + Ext.class.getCanonicalName() + " extends " + Base.class.getCanonicalName() + " " +
" fld : String " +
"end " +
"declare trait " + Base.class.getCanonicalName() + " " +
"end " +
"";
KieHelper kh = new KieHelper();
kh.addContent( s1, ResourceType.DRL );
assertEquals( 0, kh.verify().getMessages( Message.Level.ERROR ).size() );
}
/**
* 单一规则上线
*
* @param packageName
* @param ruleName
*/
public void addRule(String packageName, String ruleName) {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource(packageName + "/" + ruleName + ".drl"), ResourceType.DRL);
if (kbuilder.hasErrors()) {
logger.error("Unable to compile drl. " + packageName + ruleName + ".drl");
return;
} else {
if (kbase.getRule(packageName, ruleName) != null) {
logger.info("update rule: " + packageName + "." + ruleName);
} else {
logger.info("add rule: " + packageName + "." + ruleName);
}
}
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
kieSession = kbase.newStatelessKieSession();
setGlobal();
printRules();
}
@Test
public void testMultipleParallelKieSessionsFireUntilHalt() throws InterruptedException, ExecutionException, TimeoutException {
final int NUMBER_OF_PARALLEL_SESSIONS = 5;
/* Create KIE base */
StringBuilder sb = new StringBuilder(400);
sb.append("global java.util.List list;\n");
for (int i = 0; i < 10; i++) {
sb.append(getRule(i, ""));
}
KieBase kbase = new KieHelper().addContent(sb.toString(), ResourceType.DRL)
.build(MultithreadEvaluationOption.YES);
List<Callable<Void>> tasks = new ArrayList<>();
for (int i = 0; i < NUMBER_OF_PARALLEL_SESSIONS; i++) {
tasks.add(getMultipleParallelKieSessionsFireUntilHaltCallable(kbase, false));
}
/* Run tasks in parallel */
runTasksInParallel(tasks);
}
@Test
public void testSegmentMemoryPrototype() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource(DRL.getBytes()),
ResourceType.DRL );
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( kbuilder.getKnowledgePackages() );
KieSession ksession = kbase.newKieSession();
try {
checkKieSession(ksession);
} finally {
ksession.dispose();
}
// Create a 2nd KieSession (that will use segment memory prototype) and check that it works as the former one
KieSession ksession2 = kbase.newKieSession();
try {
checkKieSession(ksession2);
} finally {
ksession2.dispose();
}
}
@Test
public void testAddKPackageCollection() throws Exception {
String rule = "package org.drools.compiler.test\n" +
"import org.drools.compiler.StockTick\n" +
"declare StockTick @role(event) end\n" +
"rule R1 when\n" +
" StockTick()\n" +
"then\n" +
"end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( rule.getBytes() ), ResourceType.DRL );
assertFalse(kbuilder.hasErrors(), kbuilder.getErrors().toString());
Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages();
assertEquals( 2, kpkgs.size() );
byte[] skpkg = DroolsStreamUtils.streamOut( kpkgs );
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( skpkg ), ResourceType.PKG );
assertFalse(kbuilder.hasErrors(), kbuilder.getErrors().toString());
kpkgs = kbuilder.getKnowledgePackages();
assertEquals( 2, kpkgs.size() );
}
private Collection<CompositePackageDescr> buildPackageDescr() {
Map<String, CompositePackageDescr> packages = new HashMap<>();
buildResource(packages, ResourceType.DRL, ResourceToPkgDescrMapper.DRL_TO_PKG_DESCR);
buildResource(packages, ResourceType.GDRL,ResourceToPkgDescrMapper. DRL_TO_PKG_DESCR);
buildResource(packages, ResourceType.RDRL, ResourceToPkgDescrMapper.DRL_TO_PKG_DESCR);
buildResource(packages, ResourceType.DESCR, ResourceToPkgDescrMapper.DRL_TO_PKG_DESCR);
buildResource(packages, ResourceType.DSLR, ResourceToPkgDescrMapper.DSLR_TO_PKG_DESCR);
buildResource(packages, ResourceType.RDSLR, ResourceToPkgDescrMapper.DSLR_TO_PKG_DESCR);
buildResource(packages, ResourceType.XDRL, ResourceToPkgDescrMapper.XML_TO_PKG_DESCR);
buildResource(packages, ResourceType.DTABLE, ResourceToPkgDescrMapper.DTABLE_TO_PKG_DESCR);
buildResource(packages, ResourceType.TDRL, ResourceToPkgDescrMapper.DRL_TO_PKG_DESCR);
buildResource(packages, ResourceType.TEMPLATE, ResourceToPkgDescrMapper.TEMPLATE_TO_PKG_DESCR);
buildResource(packages, ResourceType.GDST, ResourceToPkgDescrMapper.GUIDED_DTABLE_TO_PKG_DESCR);
this.resourcesByType.remove(ResourceType.DRT); // drt is a template for dtables but doesn't have to be built on its own
return packages.values();
}
@Test
public void testAddPackageSingle() throws Exception {
String rule = "package org.drools.compiler.test\n" +
"import org.drools.compiler.StockTick\n" +
"rule R1 when\n" +
" StockTick()\n" +
"then\n" +
"end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL);
assertFalse(kbuilder.hasErrors(), kbuilder.getErrors().toString());
Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages();
assertEquals( 2, kpkgs.size() );
KiePackage kpkg = kpkgs.iterator().next();
assertEquals( 1, kpkg.getRules().size() );
}
@Test
public void testSessionCache() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource(DRL.getBytes()),
ResourceType.DRL );
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( kbuilder.getKnowledgePackages() );
StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl)kbase.newKieSession();
try {
checkKieSession(ksession);
} finally {
try {
ksession.reset();
checkKieSession(ksession);
} finally {
ksession.dispose();
}
}
}
@Test
public void testMultipleParallelKieSessionsWithInsertions() throws InterruptedException, ExecutionException, TimeoutException {
final int NUMBER_OF_PARALLEL_SESSIONS = 5;
/* Create KIE base */
StringBuilder sb = new StringBuilder();
sb.append("global java.util.List list;\n");
final int ruleNr = 200;
for (int i = 0; i < ruleNr; i++) {
sb.append(getRule(i, "insert( $i + 10 );\ninsert( \"\" + ($i + 10) );\n"));
}
KieBase kBase = new KieHelper().addContent(sb.toString(), ResourceType.DRL)
.build(MultithreadEvaluationOption.YES);
/* Create parallel tasks */
List<Callable<Void>> tasks = new ArrayList<>();
for (int i = 0; i < NUMBER_OF_PARALLEL_SESSIONS; i++) {
tasks.add(getMultipleParallelKieSessionsWithInsertionsCallable(kBase, ruleNr));
}
runTasksInParallel(tasks);
}
@Test
public void testGetObjectsAccumulateWithNoMatchingFacts() {
// DROOLS-1470
String drl =
"global java.util.List list\n" +
"rule R when\n" +
" accumulate(\n" +
" Object(false);\n" +
" $total : count()\n" +
" )\n" +
"then\n" +
" list.addAll(((org.drools.core.spi.Activation)kcontext.getMatch()).getObjectsDeep());\n" +
"end\n";
KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().newKieSession();
List<Object> list = new ArrayList<>();
ksession.setGlobal("list", list);
ksession.fireAllRules();
assertTrue(list.contains(0L));
ksession.dispose();
}
@Test
public void testBetaNodeWithConstraintsNoPropertySpecific() {
String rule = "package org.drools.compiler.integrationtests\n" +
"import " + Person.class.getCanonicalName() + "\n" +
"import " + Cheese.class.getCanonicalName() + "\n" +
"rule r1\n" +
"when\n" +
" Person()\n" +
" Cheese( type == 'brie' )\n" +
"then\n" +
"end\n";
KieBase kbase = new KieHelper(PropertySpecificOption.ALLOWED).addContent(rule, ResourceType.DRL).build();
ObjectTypeNode otn = getObjectTypeNode(kbase, "Cheese" );
assertNotNull( otn );
AlphaNode alphaNode = ( AlphaNode ) otn.getObjectSinkPropagator().getSinks()[0];
assertEquals( AllSetBitMask.get(), alphaNode.getDeclaredMask() );
assertEquals( AllSetBitMask.get(), alphaNode.getInferredMask() );
BetaNode betaNode = ( BetaNode ) alphaNode.getObjectSinkPropagator().getSinks()[0];
assertEquals( AllSetBitMask.get(), betaNode.getRightDeclaredMask() );
assertEquals( AllSetBitMask.get(), betaNode.getRightInferredMask() );
}
@Test
public void testDeclareExtendsWithFullyQualifiedName() {
String drl = "package org.drools.extends.test; \n" +
"" +
"declare org.drools.extends.test.Foo end \n" +
"declare org.drools.extends.test.Bar extends org.drools.extends.test.Foo end \n" +
"";
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
kfs.write( kieServices.getResources().newByteArrayResource( drl.getBytes() )
.setSourcePath( "test.drl" )
.setResourceType( ResourceType.DRL ) );
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs );
kieBuilder.buildAll();
assertFalse( kieBuilder.getResults().hasMessages( Message.Level.ERROR ) );
}
public static KieSession createKieSessionFromDRL(String drl) throws Exception{
KieHelper kieHelper = new KieHelper();
kieHelper.addContent(drl, ResourceType.DRL);
Results results = kieHelper.verify();
if (results.hasMessages(Message.Level.WARNING, Message.Level.ERROR)) {
List<Message> messages = results.getMessages(Message.Level.WARNING, Message.Level.ERROR);
for (Message message : messages) {
System.out.println("Error: "+message.getText());
}
// throw new IllegalStateException("Compilation errors were found. Check the logs.");
}
return kieHelper.build().newKieSession();
}
@Test
public void testExplictPositionalArguments() throws InstantiationException, IllegalAccessException {
String str = "package org.test;\n" +
"global java.util.List names;\n" +
"declare Person\n" +
" @Position(1) name : String \n" +
" @Position(0) age : int \n" +
"end\n" +
"rule R when \n" +
" $p : Person( 37, \"Mark\"; )\n" +
"then\n" +
" names.add( $p.getName() );\n" +
"end\n";
KieBase kieBase = new KieHelper()
.setKieModuleModel(KieServices.Factory.get().newKieModuleModel()
.setConfigurationProperty(LanguageLevelOption.PROPERTY_NAME,
LanguageLevelOption.DRL6_STRICT.toString()))
.addContent(str, ResourceType.DRL)
.build();
FactType factType = kieBase.getFactType("org.test", "Person");
Object instance = factType.newInstance();
factType.set(instance, "name", "Mark");
factType.set(instance, "age", 37);
List<String> names = new ArrayList<String>();
KieSession ksession = kieBase.newKieSession();
try {
ksession.setGlobal("names", names);
ksession.insert(instance);
ksession.fireAllRules();
assertEquals(1, names.size());
assertEquals("Mark", names.get(0));
} finally {
ksession.dispose();
}
}
@Test
public void testRuleFlowUpgrade() throws Exception {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
// Set the system property so that automatic conversion can happen
System.setProperty( "drools.ruleflow.port", "true" );
kbuilder.add( ResourceFactory.newClassPathResource("ruleflow.drl", ExecutionFlowControlTest.class), ResourceType.DRL);
kbuilder.add( ResourceFactory.newClassPathResource("ruleflow40.rfm", ExecutionFlowControlTest.class), ResourceType.DRF);
KieBase kbase = kbuilder.newKieBase();
final KieSession ksession = kbase.newKieSession();
final List list = new ArrayList();
ksession.setGlobal("list", list);
ksession.fireAllRules();
assertEquals(0, list.size());
final ProcessInstance processInstance = ksession.startProcess("0");
assertEquals( ProcessInstance.STATE_COMPLETED,
processInstance.getState() );
assertEquals( 4,
list.size() );
assertEquals( "Rule1",
list.get( 0 ) );
list.subList(1,2).contains( "Rule2" );
list.subList(1,2).contains( "Rule3" );
assertEquals( "Rule4",
list.get( 3 ) );
assertEquals( ProcessInstance.STATE_COMPLETED,
processInstance.getState() );
// Reset the system property so that automatic conversion should not happen
System.setProperty("drools.ruleflow.port", "false");
}
@Test
public void testDereferencedDeclarationOutsideOOPath() {
// DROOLS-1411
final String drl =
"import org.drools.compiler.oopath.model.*;\n" +
"global java.util.Set duplicateNames; \n" +
"\n" +
"rule DIFF_FILES_BUT_WITH_SAME_FILENAME when\n" +
" $dir1 : TMFileSet( $ic1 : /files )\n" +
" TMFileSet( this == $dir1, $ic2 : /files[this != $ic1], $ic2.name == $ic1.name )\n" +
"then\n" +
" System.out.println( $dir1 + \".: \" + $ic1 + \" \" + $ic2 );\n" +
" duplicateNames.add( $ic1.getName() );\n" +
"end\n";
final KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
.build()
.newKieSession();
final Set<String> duplicateNames = new HashSet<>();
ksession.setGlobal("duplicateNames", duplicateNames);
final TMFileSet x = new TMFileSet("X");
final TMFile file0 = new TMFile("File0", 47);
final TMFile file1 = new TMFile("File1", 47);
final TMFile file2 = new TMFile("File0", 47);
x.getFiles().addAll(Arrays.asList(file0, file1, file2));
ksession.insert(x);
ksession.fireAllRules();
assertTrue( duplicateNames.contains("File0") );
assertFalse( duplicateNames.contains("File1") );
}
private KieBase getKnowledgeBase(final Reader[] readers) throws IOException,
ClassNotFoundException {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
for ( Reader reader : readers ) {
kbuilder.add( ResourceFactory.newReaderResource(reader),
ResourceType.DRL );
}
assertFalse(kbuilder.hasErrors(), kbuilder.getErrors().toString());
KieBase kbase = getKnowledgeBase( kbuilder );
return kbase;
}
private KieSession getSessionFromString(String drl) {
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
knowledgeBuilder.add(ResourceFactory.newByteArrayResource(drl.getBytes()),
ResourceType.DRL);
if (knowledgeBuilder.hasErrors()) {
throw new RuntimeException(knowledgeBuilder.getErrors().toString());
}
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(knowledgeBuilder.getKnowledgePackages());
KieSession session = kbase.newKieSession();
return session;
}
@Test
public void testWrongPropertyNameInWatchAnnotation() throws Exception {
String rule = "package org.drools.compiler.integrationtests\n" +
"dialect \"mvel\"\n" +
"declare A\n" +
" s : String\n" +
"end\n" +
"declare B\n" +
" @propertyReactive\n" +
" on : boolean\n" +
" s : String\n" +
"end\n" +
"rule R1\n" +
"when\n" +
" A($s : s)\n" +
" $b : B(s != $s) @watch( !s1, on )\n" +
"then\n" +
" modify($b) { setS($s) }\n" +
"end\n" +
"rule R2\n" +
"when\n" +
" $b : B(on == false)\n" +
"then\n" +
" modify($b) { setOn(true) }\n" +
"end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL );
assertEquals(1, kbuilder.getErrors().size());
}
default void addResources(Object kbuilder, Collection<ResourceWithConfiguration> resources, ResourceType type) throws Exception {
for (ResourceWithConfiguration rd : resources) {
rd.getBeforeAdd().accept(kbuilder);
addResource(kbuilder, rd.getResource(), type, rd.getResourceConfiguration());
rd.getAfterAdd().accept(kbuilder);
}
}
protected void testInvalidDrl(final String drl) {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(drl.getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) {
logger.warn(kbuilder.getErrors().toString());
}
assertTrue(kbuilder.hasErrors());
}
@Test
public void testIndexedAccess() {
final String drl =
"import org.drools.compiler.oopath.model.*;\n" +
"global java.util.List list\n" +
"\n" +
"rule R when\n" +
" Man( $toy: /wife/children[0]/toys[1] )\n" +
"then\n" +
" list.add( $toy.getName() );\n" +
"end\n";
final KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
.build()
.newKieSession();
final List<String> list = new ArrayList<>();
ksession.setGlobal( "list", list );
final Woman alice = new Woman( "Alice", 38 );
final Man bob = new Man( "Bob", 40 );
bob.setWife( alice );
final Child charlie = new Child( "Charles", 12 );
final Child debbie = new Child( "Debbie", 11 );
alice.addChild( charlie );
alice.addChild( debbie );
charlie.addToy( new Toy( "car" ) );
charlie.addToy( new Toy( "ball" ) );
debbie.addToy( new Toy( "doll" ) );
ksession.insert( bob );
ksession.fireAllRules();
assertThat(list).containsExactlyInAnyOrder("ball");
}
public Collection<KiePackage> loadKnowledgePackages(KnowledgeBuilderConfiguration kbuilderConf, PackageDescr descr) {
if (kbuilderConf == null) {
kbuilderConf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
}
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(kbuilderConf);
kbuilder.add(ResourceFactory.newDescrResource(descr), ResourceType.DESCR);
if (kbuilder.hasErrors()) {
fail(kbuilder.getErrors().toString());
}
Collection<KiePackage> knowledgePackages = kbuilder.getKnowledgePackages();
return knowledgePackages;
}
public DescrResource(KieDescr descr ) {
if ( descr == null ) {
throw new IllegalArgumentException( "descr cannot be null" );
}
this.descr = descr;
setResourceType( ResourceType.DESCR );
}
@Test
public void testTypeDeclarationWithInnerClasses() {
// DROOLS-150
String str = "";
str += "package org.drools.compiler;\n" +
"\n" +
"import org.drools.compiler.compiler.TypeDeclarationTest.EventBar.*;\n" +
"" +
"declare Foo\n" +
" @role( event )\n" +
"end\n" +
"" +
"rule R when Foo() then end";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
ResourceType.DRL );
System.err.println( kbuilder.getErrors() );
assertFalse( kbuilder.hasErrors() );
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
kBase.addPackages( kbuilder.getKnowledgePackages() );
KieSession knowledgeSession = kBase.newKieSession();
FactHandle handle = knowledgeSession.insert( new EventBar.Foo() );
assertTrue( handle instanceof EventFactHandle );
}
@Test
public void testIncrementOperator() {
String str = "";
str += "package org.kie \n";
str += "global java.util.List list \n";
str += "rule rule1 \n";
str += " dialect \"mvel\" \n";
str += "when \n";
str += " $I : Integer() \n";
str += "then \n";
str += " i = $I.intValue(); \n";
str += " i += 5; \n";
str += " list.add( i ); \n";
str += "end \n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL);
assertFalse(kbuilder.hasErrors());
final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
final KieSession ksession = createKnowledgeSession(kbase);
final List list = new ArrayList();
ksession.setGlobal("list", list);
ksession.insert(5);
ksession.fireAllRules();
assertEquals(1, list.size());
assertEquals(10, list.get(0));
}
@Test
public void testImmediateEventsExpiration() {
StringBuilder sb = new StringBuilder( 400 );
sb.append( "global java.util.List list;\n" );
sb.append( "import " + MyEvent.class.getCanonicalName() + ";\n" );
sb.append( "declare MyEvent @role( event ) @expires( 1ms ) @timestamp( timestamp ) end\n" );
for (int i = 0; i < 10; i++) {
sb.append( getRuleWithEvent( i ) );
}
KieSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
KieSession ksession = new KieHelper().addContent( sb.toString(), ResourceType.DRL )
.build( EventProcessingOption.STREAM, MultithreadEvaluationOption.YES )
.newKieSession( sessionConfig, null );
assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() );
List<Integer> list = new DebugList<Integer>();
ksession.setGlobal( "list", list );
for (int i = 0; i < 10; i++) {
ksession.insert( new MyEvent( i, i*2L ) );
}
ksession.fireAllRules();
assertEquals(10, list.size());
}
public ResourceConfiguration getResourceConfiguration(String fileName) {
ResourceConfiguration conf = resourceConfigurationCache.get(fileName);
if (conf != null) {
return conf;
}
Properties prop = new Properties();
if (isAvailable(fileName + ".properties")) {
// configuration file available
try {
prop.load(new ByteArrayInputStream(getBytes(fileName + ".properties")));
} catch (IOException e) {
log.error(String.format("Error loading resource configuration from file: %s.properties", fileName));
}
}
if (ResourceType.DTABLE.matchesExtension(fileName)) {
int lastDot = fileName.lastIndexOf( '.' );
if (lastDot >= 0 && fileName.length() > lastDot+1) {
String extension = fileName.substring( lastDot+1 );
Object confClass = prop.get(ResourceTypeImpl.KIE_RESOURCE_CONF_CLASS);
if (confClass == null || confClass.toString().equals( ResourceConfigurationImpl.class.getCanonicalName() )) {
prop.setProperty( ResourceTypeImpl.KIE_RESOURCE_CONF_CLASS, DecisionTableConfigurationImpl.class.getName() );
}
prop.setProperty(DecisionTableConfigurationImpl.DROOLS_DT_TYPE, DecisionTableInputType.valueOf( extension.toUpperCase() ).toString());
}
}
conf = prop.isEmpty() ? null : ResourceTypeImpl.fromProperties(prop);
resourceConfigurationCache.put(fileName, conf);
return conf;
}