@Test public void testDeclaredSuperType() throws Exception { String drl = "package foo \n" + "declare Bean1 \n" + "age: int \n" + "name : String \n" + "end \n" + "declare Bean2 extends Bean1\n" + "cheese : String \n" + "end"; DrlParser parser = new DrlParser(LanguageLevelOption.DRL5); PackageDescr pkgDescr = parser.parse( null, drl ); TypeDeclarationDescr bean1Type = pkgDescr.getTypeDeclarations().get( 0 ); assertNull( bean1Type.getSuperTypeName() ); TypeDeclarationDescr bean2Type = pkgDescr.getTypeDeclarations().get( 1 ); assertEquals( "Bean1", bean2Type.getSuperTypeName() ); }
d.getTypeName() ); assertEquals( 2, d.getFields().size() ); assertTrue( d.getFields().containsKey( "name" ) ); assertTrue( d.getFields().containsKey( "age" ) ); TypeFieldDescr f = d.getFields().get( "name" ); assertEquals( "String", f.getPattern().getObjectType() ); f = d.getFields().get( "age" ); assertEquals( "Integer", f.getPattern().getObjectType() ); d.getTypeName() ); type.getTypeName() ); type.getAnnotation( "role" ).getValue() ); assertEquals( "\"Models a person\"", type.getAnnotation( "doc" ).getValue( "descr" ) ); assertEquals( "\"Bob\"", type.getAnnotation( "doc" ).getValue( "author" ) ); assertEquals( "Calendar.getInstance().getDate()", type.getAnnotation( "doc" ).getValue( "date" ) ); type.getFields().size() ); TypeFieldDescr field = type.getFields().get( "name" ); assertEquals( "name",
for ( final TypeDeclarationDescr td : types ) { final FactMetaModel mm = new FactMetaModel(); mm.setName( td.getTypeName() ); mm.setSuperType( td.getSuperTypeName() ); final Map<String, TypeFieldDescr> fields = td.getFields(); for ( Map.Entry<String, TypeFieldDescr> en : fields.entrySet() ) { final String fieldName = en.getKey(); final Map<String, AnnotationDescr> annotations = td.getAnnotations(); for ( final Map.Entry<String, AnnotationDescr> en : annotations.entrySet() ) { final String annotationName = en.getKey();
protected void visit(final TypeDeclarationDescr descr) { String fqcn = getFullyQualifiedClassName(descr.getTypeName()); addResourceReference(fqcn, ResourceType.JAVA); if (!(descr.getSuperTypeName() == null || descr.getSuperTypeName().isEmpty())) { fqcn = getFullyQualifiedClassName(descr.getSuperTypeName()); addResourceReference(fqcn, ResourceType.JAVA); } visitAnnos(descr); }
protected void visit( final TypeDeclarationDescr descr ) { checkResource(descr); for( TypeFieldDescr fieldDescr : descr.getFields().values() ) { visit(fieldDescr); } }
@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 ); }
@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() ); }
for (final TypeDeclarationDescr td : types) { final FactMetaModel mm = new FactMetaModel(); mm.setName(td.getTypeName()); mm.setSuperType(td.getSuperTypeName()); final Map<String, TypeFieldDescr> fields = td.getFields(); for (Map.Entry<String, TypeFieldDescr> en : fields.entrySet()) { final String fieldName = en.getKey(); for (final AnnotationDescr descr : td.getAnnotations()) { final String annotationName = descr.getName(); final Map<String, String> values = extractStringValues(descr);
@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")); }
final TypeDeclarationDescr typeDeclDescr = new TypeDeclarationDescr( StockTick.class.getName() ); typeDeclDescr.addAnnotation( "role", "event" ); packageDescr.addTypeDeclaration( typeDeclDescr );