@Override public ValueDeclaration visibleIn( Visibility visibility ) { for( ValueDeclaration declaration : declarations ) { declaration.visibleIn( visibility ); } return this; }
@Override public ValueDeclaration withMixins( Class<?>... mixins ) { for( ValueDeclaration declaration : declarations ) { declaration.withMixins( mixins ); } return this; }
@Override public ValueDeclaration setMetaInfo( Object info ) { for( ValueDeclaration declaration : declarations ) { declaration.setMetaInfo( info ); } return this; }
@Test public void testGroovyScriptResourceMixin() throws Exception { // START SNIPPET: script SingletonAssembler assembler = new SingletonAssembler( assembly -> assembly.values( HelloSpeaker.class ) .setMetaInfo( Scripting.GROOVY ) .withMixins( ScriptMixin.class ) ); HelloSpeaker speaker = assembler.module().newValue( HelloSpeaker.class ); assertThat( speaker.sayHello(), equalTo("Hello, Groovy") ); // END SNIPPET: script }
@Test public void givenSideEffectWithThisInConstructorWhenCreatingModelExpectNoException() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( Does.class ).withMixins( NoopMixin.class ).withSideEffects( DoesSideEffect.class ) ); Module module = singletonAssembler.application().findModule( "Layer 1", "Module 1" ); Does does = module.newValue( Does.class ); does.doSomething(); }
@Test public void givenConcernWithThisInConstructorWhenCreatingModelExpectNoException() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( Does.class ).withMixins( NoopMixin.class ).withConcerns( DoesConcern.class ) ); Module module = singletonAssembler.application().findModule( "Layer 1", "Module 1" ); Does does = module.newValue( Does.class ); does.doSomething(); }
@Override public ValueDeclaration withConcerns( Class<?>... concerns ) { for( ValueDeclaration declaration : declarations ) { declaration.withConcerns( concerns ); } return this; }
@Override public ValueDeclaration withSideEffects( Class<?>... sideEffects ) { for( ValueDeclaration declaration : declarations ) { declaration.withSideEffects( sideEffects ); } return this; }
public void assemble( ModuleAssembly module ) throws AssemblyException { LayerAssembly layer = module.layer(); layer.application().setName( "Script Test" ); module.transients( DomainType.class ).setMetaInfo( Scripting.JAVASCRIPT ).withMixins( ScriptMixin.class ); module.transients( HelloSpeaker.class ).setMetaInfo( Scripting.GROOVY ).withMixins( ScriptMixin.class ); module.values( HelloSpeaker.class ).setMetaInfo( Scripting.JAVASCRIPT ).withMixins( ScriptMixin.class ); }
protected void assembleValues( ModuleAssembly module, Visibility visibility ) { module.values( URL.class, Address.class, Protocol.class, Host.class, Port.class, File.class, QueryParam.class ).visibleIn( visibility ); }
@Test public void givenValueWithRuntimeMixinsWhenAssembledExpectCorrectComposition() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( SayWhat.class ).withMixins( SayThisMixin.class, SayThatMixin.class ) ); SayWhat value = singletonAssembler.valueBuilderFactory().newValue( SayWhat.class ); assertThat( value.sayThis(), equalTo( "this" ) ); assertThat( value.sayThat(), equalTo( "that" ) ); }
protected void assembleValues( ModuleAssembly module, Visibility visibility ) { module.values( URL.class, Address.class, Protocol.class, Host.class, Port.class, File.class, QueryParam.class ).visibleIn( visibility ); }
@Test public void givenValueWithRuntimeMixinOverrideWhenAssembledExpectCorrectComposition() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( SayWhere.class ).withMixins( SayHereMixin.class ) ); SayWhere value = singletonAssembler.valueBuilderFactory().newValue( SayWhere.class ); assertThat( value.sayHere(), equalTo( "here" ) ); assertThat( value.sayThere(), nullValue() ); }
@Override public void assemble( ModuleAssembly module ) { findClasses( Resource.class ).filter( isAssignableFrom( ValueComposite.class ) ) .forEach( resourceType -> module.values( resourceType ) .visibleIn( Visibility.application ) ); } }
@Test public void givenMixinWithThisInConstructorWhenCreatingModelExpectNoException() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( Does.class ).withMixins( DoesMixin.class ) ); Module module = singletonAssembler.application().findModule( "Layer 1", "Module 1" ); Does does = module.newValue( Does.class ); does.doSomething(); }
@Override public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module ) { module.entities( Male.class, Female.class, City.class, Cat.class, Dog.class ).visibleIn( Visibility.application ); module.values( Address.class ).visibleIn( Visibility.application ); return module; } }
@Override public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module ) { module.entities( Account.class, Domain.class ).visibleIn( Visibility.layer ); module.values( File.class, Host.class, Port.class, Protocol.class, QueryParam.class, URL.class ) .visibleIn( Visibility.layer ); return module; } }
@Override public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module ) { module.entities( Male.class, Female.class, City.class, Cat.class, Dog.class ).visibleIn( Visibility.application ); module.values( Address.class ).visibleIn( Visibility.application ); return module; } }
@Override public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module ) { module.entities( Account.class, Domain.class ).visibleIn( Visibility.layer ); module.values( File.class, Host.class, Port.class, Protocol.class, QueryParam.class, URL.class ) .visibleIn( Visibility.layer ); return module; } }
@Override public void assemble( ModuleAssembly module ) throws AssemblyException { module.setName( "Beside" ); module.values( BesideApplicationVisible.class ).visibleIn( Visibility.application ); module.values( BesideLayerVisible.class ).visibleIn( Visibility.layer ); module.values( BesideModuleVisible.class ).visibleIn( Visibility.module ); } }