use of org.kie.api.definition.rule.Query in project drools by kiegroup.
the class AbductionTest method testQueryAPIs.
@Test
public void testQueryAPIs() {
String droolsSource = "package org.drools.abductive.test; \n" + "import " + Abducible.class.getName() + "; \n" + "" + "declare Foo " + " @Abducible " + " id : String " + "end " + "query foo( String $s ) " + " @Abductive( target=Foo.class ) \n" + "end \n " + "query bar( String $s, Foo $foo ) " + " $foo := Foo() " + "end \n " + "rule MoveAround " + "when " + " $s : String() " + " $f : foo( $s ; ) " + " bar( $s, $f ; ) " + "then " + " delete( $s ); " + " System.out.println( 'Foo ' + $f ); " + "end " + "";
// ///////////////////////////////////
KieSession session = getSessionFromString(droolsSource);
session.insert("faa");
session.fireAllRules();
for (Object o : session.getObjects()) {
System.out.println(">>> " + o);
}
assertEquals(1, session.getObjects().size());
Query q1 = session.getKieBase().getQuery("org.drools.abductive.test", "foo");
Query q2 = session.getKieBase().getQuery("org.drools.abductive.test", "bar");
assertNotNull(q1);
assertNotNull(q2);
QueryResults q10res = new FlatQueryResults((QueryResultsImpl) session.getQueryResults("foo", "foo"));
QueryResults q11res = new FlatQueryResults((QueryResultsImpl) session.getQueryResults("foo", "foo", Variable.v));
QueryResults q20res = new FlatQueryResults((QueryResultsImpl) session.getQueryResults("bar", "foo", Variable.v));
assertEquals(1, q10res.size());
assertEquals(1, q11res.size());
assertEquals(1, q20res.size());
QueryResultsRow row10 = q10res.iterator().next();
QueryResultsRow row11 = q11res.iterator().next();
QueryResultsRow row20 = q20res.iterator().next();
assertEquals("foo", row10.get("$s"));
assertEquals("foo", row11.get("$s"));
assertEquals("foo", row20.get("$s"));
Object foo = row20.get("$foo");
assertSame(foo, session.getObjects().iterator().next());
// the implicit return argument, the abduced/retrieved fact, is hidden
assertNull(row11.get(""));
}
use of org.kie.api.definition.rule.Query in project drools by kiegroup.
the class KnowledgePackageMetaDataTest method testMetaData.
@Test
public void testMetaData() {
KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kBuilder.add(new ByteArrayResource(drl.getBytes()), ResourceType.DRL);
if (kBuilder.hasErrors()) {
fail(kBuilder.getErrors().toString());
}
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
kBase.addPackages(kBuilder.getKnowledgePackages());
KiePackage pack = kBase.getPackage("org.drools.compiler.test.definitions");
assertNotNull(pack);
assertEquals(2, pack.getFunctionNames().size());
assertTrue(pack.getFunctionNames().contains("fun1"));
assertTrue(pack.getFunctionNames().contains("fun2"));
assertEquals(2, pack.getGlobalVariables().size());
GlobalImpl g1 = new GlobalImpl("N", "java.lang.Integer");
GlobalImpl g2 = new GlobalImpl("list", "java.util.List");
assertTrue(pack.getGlobalVariables().contains(g1));
assertTrue(pack.getGlobalVariables().contains(g2));
assertEquals(2, pack.getFactTypes().size());
FactType type;
for (int j = 0; j < 2; j++) {
type = pack.getFactTypes().iterator().next();
if (type.getName().equals("org.drools.compiler.test.definitions.Person")) {
assertEquals(2, type.getFields().size());
} else if (type.getName().equals("org.drools.compiler.test.definitions.Foo")) {
assertEquals("org.drools.compiler.test.definitions.Person", type.getSuperClass());
FactField fld = type.getField("bar");
assertEquals(2, fld.getIndex());
assertEquals(String.class, fld.getType());
} else {
fail("Unexpected fact type " + type);
}
}
assertEquals(2, pack.getQueries().size());
for (Query q : pack.getQueries()) {
assertTrue(q.getName().equals("qry1") || q.getName().equals("qry2"));
}
assertEquals(4, pack.getRules().size());
assertTrue(pack.getRules().containsAll(pack.getQueries()));
}
Aggregations