use of org.kie.api.definition.type.FactType in project drools by kiegroup.
the class DeclaredTypesTest method testFactType.
@Test
public void testFactType() throws Exception {
String str = "package org.test;\n" + "import " + Person.class.getCanonicalName() + ";" + "declare Name\n" + " value : String\n" + "end\n" + "rule R when\n" + " Name($v : value == \"Mario\")\n" + "then\n" + " insert($v);" + "end";
KieSession ksession = getKieSession(str);
FactType nameType = ksession.getKieBase().getFactType("org.test", "Name");
Object name = nameType.newInstance();
nameType.set(name, "value", "Mario");
ksession.insert(name);
ksession.fireAllRules();
assertEquals("Mario", nameType.get(name, "value"));
Collection<String> results = getObjectsIntoList(ksession, String.class);
assertEquals(1, results.size());
assertEquals("Mario", results.iterator().next());
}
use of org.kie.api.definition.type.FactType in project drools by kiegroup.
the class KnowledgeBaseImpl method getFactType.
public FactType getFactType(String packageName, String typeName) {
String name = packageName + "." + typeName;
readLock();
try {
for (InternalKnowledgePackage pkg : this.pkgs.values()) {
FactType type = pkg.getFactType(name);
if (type != null) {
return type;
}
}
return null;
} finally {
readUnlock();
}
}
use of org.kie.api.definition.type.FactType in project drools by kiegroup.
the class TypeDeclarationTest method testCircularDeclaration.
@Test
public void testCircularDeclaration() throws Exception {
String rule = "package org.drools.compiler.test\n" + "declare FactA\n" + " fieldB: FactB\n" + "end\n" + "declare FactB\n" + " fieldA: FactA\n" + "end\n" + "rule R1 when\n" + " $fieldA : FactA( $fieldB : fieldB )\n" + " FactB( this == $fieldB, fieldA == $fieldA )\n" + "then\n" + "end";
KieBase kbase = new KieHelper().addContent(rule, ResourceType.DRL).build();
KieSession ksession = kbase.newKieSession();
FactType aType = kbase.getFactType("org.drools.compiler.test", "FactA");
Object a = aType.newInstance();
FactType bType = kbase.getFactType("org.drools.compiler.test", "FactB");
Object b = bType.newInstance();
aType.set(a, "fieldB", b);
bType.set(b, "fieldA", a);
ksession.insert(a);
ksession.insert(b);
int rules = ksession.fireAllRules();
assertEquals(1, rules);
}
use of org.kie.api.definition.type.FactType in project drools by kiegroup.
the class TypeDeclarationTest method testCircularDeclarationWithExtension.
@Test
public void testCircularDeclarationWithExtension() throws Exception {
// DROOLS-640
String drl = "package org.drools.compiler.test\n" + "declare FactA\n" + " fieldB: FactB\n" + "end\n" + "declare FactB extends FactA end\n" + "rule R1 when\n" + " $a : FactA( )\n" + " $b : FactB( this == $a.fieldB )\n" + "then\n" + "end";
KieBase kbase = new KieHelper().addContent(drl, ResourceType.DRL).build();
KieSession ksession = kbase.newKieSession();
FactType aType = kbase.getFactType("org.drools.compiler.test", "FactA");
FactType bType = kbase.getFactType("org.drools.compiler.test", "FactB");
Object a = aType.newInstance();
Object b = bType.newInstance();
aType.set(a, "fieldB", b);
ksession.insert(a);
ksession.insert(b);
int rules = ksession.fireAllRules();
assertEquals(1, rules);
}
use of org.kie.api.definition.type.FactType in project drools by kiegroup.
the class TypeDeclarationTest method testRecursiveDeclaration.
@Test
public void testRecursiveDeclaration() throws Exception {
String rule = "package org.drools.compiler\n" + "declare Node\n" + " value: String\n" + " parent: Node\n" + "end\n" + "rule R1 when\n" + " $parent: Node( value == \"parent\" )\n" + " $child: Node( $value : value, parent == $parent )\n" + "then\n" + " System.out.println( $value );\n" + "end";
KieBase kbase = new KieHelper().addContent(rule, ResourceType.DRL).build();
KieSession ksession = kbase.newKieSession();
FactType nodeType = kbase.getFactType("org.drools.compiler", "Node");
Object parent = nodeType.newInstance();
nodeType.set(parent, "value", "parent");
ksession.insert(parent);
Object child = nodeType.newInstance();
nodeType.set(child, "value", "child");
nodeType.set(child, "parent", parent);
ksession.insert(child);
int rules = ksession.fireAllRules();
assertEquals(1, rules);
}
Aggregations