use of org.drools.compiler.lang.descr.AndDescr in project drools by kiegroup.
the class RuleHandler method end.
public Object end(final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
final Element element = parser.endElementBuilder();
final RuleDescr ruleDescr = (RuleDescr) parser.getCurrent();
final AndDescr lhs = ruleDescr.getLhs();
if (lhs == null) {
throw new SAXParseException("<rule> requires a LHS", parser.getLocator());
}
NodeList list = element.getElementsByTagName("rhs");
if (list.getLength() == 0) {
throw new SAXParseException("<rule> requires a <rh> child element", parser.getLocator());
}
ruleDescr.setConsequence(((org.w3c.dom.Text) list.item(0).getChildNodes().item(0)).getWholeText());
NodeList attributes = element.getElementsByTagName("rule-attribute");
for (int i = 0, length = attributes.getLength(); i < length; i++) {
final String name = ((Element) attributes.item(i)).getAttribute("name");
emptyAttributeCheck("rule-attribute", "name", name, parser);
final String value = ((Element) attributes.item(i)).getAttribute("value");
ruleDescr.addAttribute(new AttributeDescr(name, value));
}
((PackageDescr) parser.getData()).addRule(ruleDescr);
return ruleDescr;
}
use of org.drools.compiler.lang.descr.AndDescr in project drools by kiegroup.
the class XmlPackageReaderTest method testAccumulateMultiPattern.
@Test
public void testAccumulateMultiPattern() throws Exception {
final XmlPackageReader xmlPackageReader = getXmReader();
xmlPackageReader.read(new InputStreamReader(getClass().getResourceAsStream("test_ParseAccumulate.xml")));
final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
assertNotNull(packageDescr);
RuleDescr obj = (RuleDescr) packageDescr.getRules().get(1);
Object patternobj = obj.getLhs().getDescrs().get(0);
assertTrue(patternobj instanceof PatternDescr);
final PatternDescr patterncheese = (PatternDescr) patternobj;
assertEquals(patterncheese.getIdentifier(), "cheese");
assertEquals(patterncheese.getObjectType(), "Cheese");
AccumulateDescr accumulatedescr = (AccumulateDescr) patterncheese.getSource();
assertEquals("total += $cheese.getPrice();", accumulatedescr.getActionCode());
assertEquals("int total = 0;", accumulatedescr.getInitCode());
assertEquals("new Integer( total ) );", accumulatedescr.getResultCode());
AndDescr anddescr = (AndDescr) accumulatedescr.getInput();
List descrlist = anddescr.getDescrs();
PatternDescr[] listpattern = (PatternDescr[]) descrlist.toArray(new PatternDescr[descrlist.size()]);
assertEquals(listpattern[0].getObjectType(), "Milk");
assertEquals(listpattern[1].getObjectType(), "Cup");
}
use of org.drools.compiler.lang.descr.AndDescr in project drools by kiegroup.
the class XmlPackageReaderTest method testParseQuery.
@Test
public void testParseQuery() throws Exception {
final XmlPackageReader xmlPackageReader = getXmReader();
xmlPackageReader.read(new InputStreamReader(getClass().getResourceAsStream("test_ParseQuery.xml")));
final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
assertNotNull(packageDescr);
assertEquals("com.sample", packageDescr.getName());
final List imports = packageDescr.getImports();
assertEquals(2, imports.size());
assertEquals("java.util.HashMap", ((ImportDescr) imports.get(0)).getTarget());
assertEquals("org.drools.compiler.*", ((ImportDescr) imports.get(1)).getTarget());
final List globals = packageDescr.getGlobals();
assertEquals(2, globals.size());
final GlobalDescr x = (GlobalDescr) globals.get(0);
final GlobalDescr yada = (GlobalDescr) globals.get(1);
assertEquals("com.sample.X", x.getType());
assertEquals("x", x.getIdentifier());
assertEquals("com.sample.Yada", yada.getType());
assertEquals("yada", yada.getIdentifier());
final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get(0);
final List names = functionDescr.getParameterNames();
assertEquals("foo", names.get(0));
assertEquals("bada", names.get(1));
final List types = functionDescr.getParameterTypes();
assertEquals("Bar", types.get(0));
assertEquals("Bing", types.get(1));
assertEquals("System.out.println(\"hello world\");", functionDescr.getText().trim());
final QueryDescr queryDescr = (QueryDescr) packageDescr.getRules().get(0);
assertEquals("my query", queryDescr.getName());
final AndDescr lhs = queryDescr.getLhs();
assertEquals(1, lhs.getDescrs().size());
final PatternDescr patternDescr = (PatternDescr) lhs.getDescrs().get(0);
assertEquals("Foo", patternDescr.getObjectType());
}
use of org.drools.compiler.lang.descr.AndDescr in project drools by kiegroup.
the class XmlPackageReaderTest method testParseSimpleRule.
@Test
public void testParseSimpleRule() throws Exception {
final XmlPackageReader xmlPackageReader = getXmReader();
xmlPackageReader.read(new InputStreamReader(getClass().getResourceAsStream("test_SimpleRule1.xml")));
final PackageDescr packageDescr = xmlPackageReader.getPackageDescr();
assertNotNull(packageDescr);
assertEquals("com.sample", packageDescr.getName());
final List imports = packageDescr.getImports();
assertEquals(2, imports.size());
assertEquals("java.util.List", ((ImportDescr) imports.get(0)).getTarget());
assertEquals("org.drools.compiler.Person", ((ImportDescr) imports.get(1)).getTarget());
RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get(0);
assertEquals("simple_rule1", ruleDescr.getName());
AndDescr lhs = ruleDescr.getLhs();
PatternDescr patternDescr = (PatternDescr) lhs.getDescrs().get(0);
assertEquals("Person", patternDescr.getObjectType());
ExprConstraintDescr expr = (ExprConstraintDescr) ((AndDescr) patternDescr.getConstraint()).getDescrs().get(0);
assertEquals("name == \"darth\"", expr.getExpression());
ruleDescr = (RuleDescr) packageDescr.getRules().get(1);
assertEquals("simple_rule2", ruleDescr.getName());
lhs = ruleDescr.getLhs();
patternDescr = (PatternDescr) lhs.getDescrs().get(0);
assertEquals("Person", patternDescr.getObjectType());
expr = (ExprConstraintDescr) ((AndDescr) patternDescr.getConstraint()).getDescrs().get(0);
assertEquals("age == 35 || == -3.5", expr.getExpression());
ruleDescr = (RuleDescr) packageDescr.getRules().get(2);
assertEquals("simple_rule3", ruleDescr.getName());
lhs = ruleDescr.getLhs();
patternDescr = (PatternDescr) lhs.getDescrs().get(0);
assertEquals("Person", patternDescr.getObjectType());
expr = (ExprConstraintDescr) ((AndDescr) patternDescr.getConstraint()).getDescrs().get(0);
assertEquals("age == 35 || (!= 7.0 && != -70)", expr.getExpression());
ruleDescr = (RuleDescr) packageDescr.getRules().get(3);
assertEquals("simple_rule3", ruleDescr.getName());
lhs = ruleDescr.getLhs();
patternDescr = (PatternDescr) lhs.getDescrs().get(1);
assertEquals("Person", patternDescr.getObjectType());
expr = (ExprConstraintDescr) ((AndDescr) patternDescr.getConstraint()).getDescrs().get(0);
assertEquals("name == $s", expr.getExpression());
ruleDescr = (RuleDescr) packageDescr.getRules().get(4);
assertEquals("simple_rule4", ruleDescr.getName());
lhs = ruleDescr.getLhs();
patternDescr = (PatternDescr) lhs.getDescrs().get(1);
assertEquals("Person", patternDescr.getObjectType());
expr = (ExprConstraintDescr) ((AndDescr) patternDescr.getConstraint()).getDescrs().get(0);
assertEquals("(name == $s) || (age == 35 || (!= 7.0 && != -70))", expr.getExpression());
ruleDescr = (RuleDescr) packageDescr.getRules().get(5);
assertEquals("simple_rule5", ruleDescr.getName());
lhs = ruleDescr.getLhs();
patternDescr = (PatternDescr) lhs.getDescrs().get(1);
assertEquals("Person", patternDescr.getObjectType());
expr = (ExprConstraintDescr) ((AndDescr) patternDescr.getConstraint()).getDescrs().get(0);
assertEquals("(name == $s) || ((age != 34) && (age != 37) && (name != \"yoda\"))", expr.getExpression());
}
use of org.drools.compiler.lang.descr.AndDescr in project drools by kiegroup.
the class KnowledgeBuilderTest method testSerializable.
@Test
public void testSerializable() throws Exception {
final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl();
final PackageDescr packageDescr = new PackageDescr("p1");
final RuleDescr ruleDescr = new RuleDescr("rule-1");
packageDescr.addRule(ruleDescr);
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs(lhs);
packageDescr.addGlobal(new GlobalDescr("map", "java.util.Map"));
ruleDescr.setConsequence("map.put(\"value\", new Integer(1) );");
// check that packageDescr is serializable
final PackageDescr back = (PackageDescr) SerializationHelper.serializeObject(packageDescr);
assertNotNull(back);
assertEquals("p1", back.getName());
builder.addPackage(packageDescr);
InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName());
final RuleImpl rule = pkg.getRule("rule-1");
assertLength(0, builder.getErrors().getErrors());
InternalKnowledgePackage newPkg = SerializationHelper.serializeObject(pkg);
final RuleImpl newRule = newPkg.getRule("rule-1");
InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase();
// It's been serialised so we have to simulate the re-wiring process
newPkg.getDialectRuntimeRegistry().onAdd(kBase.getRootClassLoader());
newPkg.getDialectRuntimeRegistry().onBeforeExecute();
kBase.getGlobals().put("map", Map.class);
final KieSession workingMemory = kBase.newKieSession();
final HashMap map = new HashMap();
workingMemory.setGlobal("map", map);
final LeftTupleImpl tuple = new MockTuple(new HashMap());
tuple.setLeftTupleSink(new RuleTerminalNode(1, new CompositeObjectSinkAdapterTest.MockBetaNode(), newRule, newRule.getLhs(), 0, new BuildContext(kBase)));
final Activation activation = new MockActivation(newRule, 0, newRule.getLhs(), tuple);
final DefaultKnowledgeHelper knowledgeHelper = new org.drools.core.base.DefaultKnowledgeHelper(((StatefulKnowledgeSessionImpl) workingMemory));
knowledgeHelper.setActivation(activation);
newRule.getConsequence().evaluate(knowledgeHelper, ((StatefulKnowledgeSessionImpl) workingMemory));
assertEquals(new Integer(1), map.get("value"));
}
Aggregations