typeDeclDescr.addAnnotation( "role", "event" ); packageDescr.addTypeDeclaration( typeDeclDescr ); final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr );
@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 testTypeDeclarationWithFieldMetadata() throws Exception { PackageDescr pkgDescr = new PackageDescr( "org.drools.compiler.test" ); TypeDeclarationDescr typeDescr = new TypeDeclarationDescr( "TypeWithFieldMeta" ); TypeFieldDescr f1 = new TypeFieldDescr( "field", new PatternDescr( "String" ) ); f1.addAnnotation("custom", null); typeDescr.addField( f1 ); pkgDescr.addTypeDeclaration( typeDescr ); KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); builder.addPackage(pkgDescr); assertFalse(builder.hasErrors()); InternalKnowledgePackage bp = builder.getPackage(pkgDescr.getName()); final FactType factType = bp.getFactType("org.drools.compiler.test.TypeWithFieldMeta"); assertNotNull( factType ); final FactField field = factType.getField( "field" ); assertNotNull( field ); final Map<String, Object> fieldMetaData = field.getMetaData(); assertNotNull("No field-level custom metadata got compiled", fieldMetaData); assertTrue("Field metadata does not include expected value", fieldMetaData.containsKey("custom")); }
@Test public void testTypeDeclarationNewBean() throws Exception { PackageDescr pkgDescr = new PackageDescr( "org.drools.compiler.test" ); TypeDeclarationDescr typeDescr = new TypeDeclarationDescr( "NewBean" ); TypeFieldDescr f1 = new TypeFieldDescr( "name", new PatternDescr( "String" ) ); TypeFieldDescr f2 = new TypeFieldDescr( "age", new PatternDescr( "int" ) ); typeDescr.addField( f1 ); typeDescr.addField( f2 ); pkgDescr.addTypeDeclaration( typeDescr ); KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl(); builder.addPackage( pkgDescr ); InternalKnowledgePackage pkg = builder.getPackage(pkgDescr.getName()); assertEquals( 1, pkg.getTypeDeclarations().size() ); TypeDeclaration type = pkg.getTypeDeclaration( "NewBean" ); assertEquals( "NewBean", type.getTypeName() ); assertEquals( Role.Type.FACT, type.getRole() ); assertEquals( "org.drools.compiler.test.NewBean", type.getTypeClass().getName() ); assertFalse( builder.hasErrors() ); InternalKnowledgePackage bp = builder.getPackage(pkgDescr.getName()); Class newBean = bp.getPackageClassLoader().loadClass( "org.drools.compiler.test.NewBean" ); assertNotNull( newBean ); }