protected void visit( final PackageDescr descr ) { if( descr == null ) { return; } checkResource(descr); for( ImportDescr importDescr : descr.getImports() ) { visit(importDescr); for( FunctionImportDescr funcImportDescr : descr.getFunctionImports() ) { visit(funcImportDescr); for( AccumulateImportDescr accImportDescr : descr.getAccumulateImports() ) { visit(accImportDescr); for( AttributeDescr attrDescr : descr.getAttributes() ) { visit(attrDescr); for( GlobalDescr globDesc : descr.getGlobals() ) { visit(globDesc); for( FunctionDescr funcDescr : descr.getFunctions() ) { visit(funcDescr); for( RuleDescr ruleDescr : descr.getRules() ) { visit(ruleDescr); for( TypeDeclarationDescr typeDescr : descr.getTypeDeclarations() ) { visit(typeDescr); for( EntryPointDeclarationDescr entryDescr : descr.getEntryPointDeclarations() ) { visit(entryDescr);
@Test public void testAttributeOverriding() { PackageDescr desc = new PackageDescr("foo"); AttributeDescr at1 = new AttributeDescr("foo", "bar"); AttributeDescr at2 = new AttributeDescr("foo2", "default"); desc.addAttribute( at1 ); desc.addAttribute( at2 ); RuleDescr rule = new RuleDescr("abc"); rule.addAttribute( new AttributeDescr("foo", "overridden") ); desc.addRule( rule ); List pkgAts = desc.getAttributes(); assertEquals("bar", ((AttributeDescr)pkgAts.get( 0 )).getValue()); assertEquals("default", ((AttributeDescr)pkgAts.get( 1 )).getValue()); desc.afterRuleAdded( rule ); Map<String, AttributeDescr> ruleAts = rule.getAttributes(); assertEquals("overridden", ((AttributeDescr)ruleAts.get( "foo" )).getValue()); assertEquals("default", ((AttributeDescr)ruleAts.get( "foo2" )).getValue()); }
@Test public void testEval() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "eval_parsing.drl" ); assertEquals( "org.drools.compiler", pkg.getName() ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 1, rule1.getLhs().getDescrs().size() ); }
@Test @Ignore public void testIncompleteCode10() throws DroolsParserException, RecognitionException { String input = "package a.b.c import a.b.c.*" + " rule MyRule xxxxx Class ( property memberOf " + " query MyQuery Class ( property memberOf collection ) end "; DrlParser parser = new DrlParser(LanguageLevelOption.DRL5); PackageDescr descr = parser.parse(true, input); assertEquals("a.b.c", descr.getNamespace()); assertEquals("a.b.c.*", descr.getImports().get(0) .getTarget()); assertEquals(0, descr.getRules().size()); }
assertNotNull( packageDescr ); assertEquals( "com.sample", packageDescr.getName() ); final List imports = packageDescr.getImports(); assertEquals( 2, imports.size() ); ((ImportDescr) imports.get( 1 )).getTarget() ); final List globals = packageDescr.getGlobals(); assertEquals( 2, globals.size() ); yada.getIdentifier() ); final FunctionDescr functionDescr = (FunctionDescr) packageDescr.getFunctions().get( 0 ); final List names = functionDescr.getParameterNames(); assertEquals( "foo", functionDescr.getText().trim() ); final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 ); assertEquals( "my rule", ruleDescr.getName() );
@Test public void testRuleNamesStartingWithNumbers() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "rule_names_number_prefix.drl" ); assertEquals( 2, pkg.getRules().size() ); assertEquals( "1. Do Stuff!", ((RuleDescr) pkg.getRules().get( 0 )).getName() ); assertEquals( "2. Do More Stuff!", ((RuleDescr) pkg.getRules().get( 1 )).getName() ); }
final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); pattern.addConstraint( fieldBindingDescr ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); builder.getErrors().getErrors() ); InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName()); final RuleImpl rule = pkg.getRule( "rule-1" ); final EvalCondition eval = (EvalCondition) rule.getLhs().getChildren().get( 1 );
private RuleImpl createRule( final ConditionalElementDescr ceDescr, final KnowledgeBuilderImpl builder, final String consequence ) throws Exception { final PackageDescr packageDescr = new PackageDescr( "p1" ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); lhs.addDescr( (BaseDescr) ceDescr ); final PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); patternDescr.addConstraint( new ExprConstraintDescr( "type == \"stilton\" ") ); ceDescr.addDescr( patternDescr ); ruleDescr.setConsequence( consequence ); builder.addPackage( packageDescr ); InternalKnowledgePackage pkg = builder.getPackage(packageDescr.getName()); final RuleImpl rule = pkg.getRule( "rule-1" ); assertEquals( "rule-1", rule.getName() ); return rule; }
@Test public void testSemicolon() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "semicolon.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( "org.drools.compiler", pkg.getName() ); assertEquals( 1, pkg.getGlobals().size() ); assertEquals( 3, pkg.getRules().size() ); final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 2, rule1.getLhs().getDescrs().size() ); final RuleDescr query1 = (RuleDescr) pkg.getRules().get( 1 ); assertEquals( 3, query1.getLhs().getDescrs().size() ); final RuleDescr rule2 = (RuleDescr) pkg.getRules().get( 2 ); assertEquals( 2, rule2.getLhs().getDescrs().size() ); }
private PackageDescr createBasicPackageWithOneRule(int line, int col) { PackageDescr packageDescr = new PackageDescr( "p1" ); RuleDescr ruleDescr = new RuleDescr( "rule-1" ); ruleDescr.setLocation( line, col ); packageDescr.addRule( ruleDescr ); AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" ); literalDescr.addRestriction( new LiteralRestrictionDescr( "==", null ) ); patternDescr.addConstraint( literalDescr ); ruleDescr.setConsequence( "" ); return packageDescr; }
@Test public void testGlobal() throws Exception { PackageDescr pack = (PackageDescr) parseResource( "compilationUnit", "globals.drl" ); assertEquals( 1, pack.getRules().size() ); final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 ); assertEquals( 1, rule.getLhs().getDescrs().size() ); assertEquals( 1, pack.getImports().size() ); assertEquals( 2, pack.getGlobals().size() ); final GlobalDescr foo = (GlobalDescr) pack.getGlobals().get( 0 ); assertEquals( "java.lang.String", foo.getType() ); assertEquals( "foo", foo.getIdentifier() ); final GlobalDescr bar = (GlobalDescr) pack.getGlobals().get( 1 ); assertEquals( "java.lang.Integer", bar.getType() ); assertEquals( "bar", bar.getIdentifier() ); }
@Test public void testTypeDeclaration() throws Exception { PackageDescr pkgDescr = new PackageDescr( "org.drools.compiler" ); TypeDeclarationDescr typeDescr = new TypeDeclarationDescr( "StockTick" ); typeDescr.addAnnotation( Role.class.getCanonicalName(), "Event" ); typeDescr.addAnnotation( TypeSafe.class.getCanonicalName(), "true" ); pkgDescr.addTypeDeclaration( typeDescr ); KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); builder.addPackage( pkgDescr ); if ( builder.hasErrors() ) { fail( builder.getErrors().toString() ); } InternalKnowledgePackage pkg = builder.getPackage(pkgDescr.getName()); assertEquals( 1, pkg.getTypeDeclarations().size() ); TypeDeclaration type = pkg.getTypeDeclaration( "StockTick" ); assertTrue( type.isTypesafe() ); assertEquals( Role.Type.EVENT, type.getRole() ); assertEquals( StockTick.class, type.getTypeClass() ); }
@Test public void testErrors() 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 ); final PatternDescr pattern = new PatternDescr( Cheese.class.getName(), "stilton" ); lhs.addDescr( pattern ); BindingDescr fieldBindingDescr = new BindingDescr( "x", "price" ); pattern.addConstraint( fieldBindingDescr ); fieldBindingDescr = new BindingDescr( "y", "price" ); pattern.addConstraint( fieldBindingDescr ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); pattern.addConstraint( new ExprConstraintDescr("price == x") ); // There is no m this should produce errors. ruleDescr.setConsequence( "update(m);" ); builder.addPackage( packageDescr ); assertTrue( builder.getErrors().getErrors().length > 0 ); }
@Test public void testFunctionWithArrays() throws Exception { PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "function_arrays.drl" ); assertEquals( "foo", pkg.getName() ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEqualsIgnoreWhitespace( "yourFunction(new String[3] {\"a\",\"b\",\"c\"});", (String) rule.getConsequence() ); final FunctionDescr func = (FunctionDescr) pkg.getFunctions().get( 0 ); assertEquals( "String[]", func.getReturnType() ); assertEquals( "args[]", func.getParameterNames().get( 0 ) ); assertEquals( "String", func.getParameterTypes().get( 0 ) ); }
@Test public void testParseGlobal() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseGlobal.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() ); }
private RuleDescr parseDrl( ExpandedDRLInfo expandedDRLInfo ) { DrlParser drlParser = new DrlParser(); PackageDescr packageDescr = null; try { packageDescr = drlParser.parse( true, expandedDRLInfo.plainDrl ); } catch ( DroolsParserException e ) { throw new RuntimeException( e ); } expandedDRLInfo.registerGlobalDescrs( packageDescr.getGlobals() ); return packageDescr.getRules().get( 0 ); }
"package_attributes.drl" ); AttributeDescr at = (AttributeDescr) pkg.getAttributes().get( 0 ); assertEquals( "agenda-group", at.getName() ); assertEquals( "x", at.getValue() ); at = (AttributeDescr) pkg.getAttributes().get( 1 ); assertEquals( "dialect", at.getName() ); pkg.getRules().size() ); pkg.getImports().size() ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "bar", rule.getName() ); at.getValue() ); rule = (RuleDescr) pkg.getRules().get( 1 ); assertEquals( "baz", rule.getName() );
PackageDescr pkg=new PackageDescr(); pkg.setName("com.demo.model"); pkg.addImport(importEntry1); ImportDescr importEntry2= new ImportDescr(); importEntry2.setTarget("com.demo.model.PotentialCustomer"); pkg.addImport(importEntry2); pkg.addImport(importEntry3); globalEntry.setType("org.slf4j.Logger"); globalEntry.setIdentifier("logger"); pkg.addGlobal(globalEntry); pkg.addRule(ruleEntry); String drl = new DrlDumper().dump( pkg );
assertNotNull( in ); builder.addPackage( new PackageDescr( "com.sample" ) );
@Test public void testSerialization() { PackageDescrBuilder builder = DescrFactory.newPackage().name( "foo" ); String className = Person.class.getName(); builder.newImport().target(className).end(); PackageDescr descr = builder.getDescr(); ImportDescr importDescr = new ImportDescr(className); ImportDescr badImportDescr = new ImportDescr(null); assertTrue(descr.getImports().contains(importDescr)); try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(baos); descr.writeExternal(out); ObjectInput in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); PackageDescr newDescr = new PackageDescr(); newDescr.readExternal(in); assertFalse(newDescr.getImports().contains(badImportDescr)); assertTrue(newDescr.getImports().contains(importDescr)); } catch ( IOException ioe ) { fail( ioe.getMessage() ); } catch ( ClassNotFoundException cnfe ) { fail( cnfe.getMessage() ); } }