/** * Declare Assembler. * @param classname Assembler class name * @return This Module declaration * @throws AssemblyException if unable to load class, not an Assembler or unable to instanciate */ public ModuleDeclaration withAssembler( String classname ) throws AssemblyException { Class<? extends Assembler> clazz = loadClass( classname ); return withAssembler( clazz ); }
/** * Declare Module. * @param moduleName Name of the Module * @return Module declaration for the given name, new if did not already exists */ public ModuleDeclaration withModule( String moduleName ) { ModuleDeclaration module = modules.get( moduleName ); if( module != null ) { return module; } module = new ModuleDeclaration( moduleName ); modules.put( moduleName, module ); return module; }
/** * Declare Assembler. * @param assemblerClass Assembler class * @return This Module declaration * @throws AssemblyException not an Assembler or if unable to instanciate */ public ModuleDeclaration withAssembler( Class<?> assemblerClass ) throws AssemblyException { Assembler assembler = createAssemblerInstance( assemblerClass ); assemblers.add( assembler ); return this; }
/** * Declare Assemblers. * <p>Declare several Assemblers from an Iterable of Class objects.</p> * <p>Typically used along {@link org.apache.polygene.bootstrap.ClassScanner}.</p> * @param assemblerClasses Assembler classes * @return This Module declaration * @throws AssemblyException if one of the Class is not an Assembler or unable to instantiate */ public ModuleDeclaration withAssemblers( Iterable<Class<?>> assemblerClasses ) throws AssemblyException { List<Class<?>> notAssemblers = StreamSupport.stream( assemblerClasses.spliterator(), false ) .filter( isAssignableFrom( Assembler.class ).negate() ) .collect( toList() ); if( !notAssemblers.isEmpty() ) { throw new AssemblyException( "Classes " + notAssemblers + " are not implementing " + Assembler.class.getName() ); } for( Class<?> assemblerClass : assemblerClasses ) { withAssembler( assemblerClass ); } return this; }
LayerAssembly createLayer( ApplicationAssembly application ) { layer = application.layer( layerName ); layer.setName( layerName ); for( ModuleDeclaration module : modules.values() ) { ModuleAssembly assembly = module.createModule( layer ); } return layer; }
void initialize( HashMap<String, LayerAssembly> createdLayers ) { for( String uses : using ) { LayerAssembly usedLayer = createdLayers.get( uses ); layer.uses( usedLayer ); } for( ModuleDeclaration module : modules.values() ) { module.initialize(); } } }
@Test public void givenBuilderUseWhenBuildingApplicationExpectSuccess() throws AssemblyException, ActivationException { ApplicationBuilder builder = new ApplicationBuilder( "Build from API test." ); builder.withLayer( "layer1" ).using( "layer2" ).using( "layer3" ); builder.withLayer( "layer2" ); builder.withLayer( "layer3" ) .withModule( "test module" ) .withAssemblers( findClasses( getClass() ).filter( matches( ".*ServiceAssembler" ) ) .collect( toList() ) ); Application application = builder.newApplication(); Module module = application.findModule( "layer3", "test module" ); TestService service = module.findService( TestService.class ).get(); assertThat( service.sayHello(), equalTo( "Hello Polygene!" ) ); }
/** * Declare Assemblers. * <p>Declare several Assemblers from an Iterable of Class objects.</p> * <p>Typically used along {@link org.apache.polygene.bootstrap.ClassScanner}.</p> * @param assemblerClasses Assembler classes * @return This Module declaration * @throws AssemblyException if one of the Class is not an Assembler or unable to instantiate */ public ModuleDeclaration withAssemblers( Iterable<Class<?>> assemblerClasses ) throws AssemblyException { List<Class<?>> notAssemblers = StreamSupport.stream( assemblerClasses.spliterator(), false ) .filter( isAssignableFrom( Assembler.class ).negate() ) .collect( toList() ); if( !notAssemblers.isEmpty() ) { throw new AssemblyException( "Classes " + notAssemblers + " are not implementing " + Assembler.class.getName() ); } for( Class<?> assemblerClass : assemblerClasses ) { withAssembler( assemblerClass ); } return this; }
LayerAssembly createLayer( ApplicationAssembly application ) { layer = application.layer( layerName ); layer.setName( layerName ); for( ModuleDeclaration module : modules.values() ) { ModuleAssembly assembly = module.createModule( layer ); } return layer; }
void initialize( HashMap<String, LayerAssembly> createdLayers ) { for( String uses : using ) { LayerAssembly usedLayer = createdLayers.get( uses ); layer.uses( usedLayer ); } for( ModuleDeclaration module : modules.values() ) { module.initialize(); } } }
/** * Declare Assembler. * @param classname Assembler class name * @return This Module declaration * @throws AssemblyException if unable to load class, not an Assembler or unable to instanciate */ public ModuleDeclaration withAssembler( String classname ) throws AssemblyException { Class<? extends Assembler> clazz = loadClass( classname ); return withAssembler( clazz ); }
moduleDeclaration.withAssembler( string );
/** * Declare Assembler. * @param assemblerClass Assembler class * @return This Module declaration * @throws AssemblyException not an Assembler or if unable to instanciate */ public ModuleDeclaration withAssembler( Class<?> assemblerClass ) throws AssemblyException { Assembler assembler = createAssemblerInstance( assemblerClass ); assemblers.add( assembler ); return this; }
/** * Declare Module. * @param moduleName Name of the Module * @return Module declaration for the given name, new if did not already exists */ public ModuleDeclaration withModule( String moduleName ) { ModuleDeclaration module = modules.get( moduleName ); if( module != null ) { return module; } module = new ModuleDeclaration( moduleName ); modules.put( moduleName, module ); return module; }
moduleDeclaration.withAssembler( string );
appBuilder.withLayer( "Layer 1" ).withModule( "Module A" ).withAssembler( module -> module.services( TestService.class ) .identifiedBy( "TestService_Module.A" ) .withActivators( FailBeforePassivationServiceActivator.class ) .instantiateOnStartup() ); appBuilder.withLayer( "Layer 2" ).withModule( "Module B" ).withAssembler( module -> module.services( TestService.class ) .identifiedBy( "TestService_Module.B" )