public ScriptMixin( @Structure PolygeneSPI spi, @This Object thisComposite, @State StateHolder state, @Structure Layer layer, @Structure Module module, @Structure Application application ) { descriptor = spi.compositeDescriptorFor( thisComposite ); engine = createNewEngine(); Bindings mixinBindings = engine.getBindings( ScriptContext.ENGINE_SCOPE ); mixinBindings.put( "Polygene", spi ); mixinBindings.put( "application", application ); mixinBindings.put( "layer", layer ); mixinBindings.put( "module", module ); mixinBindings.put( "This", thisComposite ); mixinBindings.put( "state", state ); mixinBindings.put( "objectFactory", module.objectFactory() ); mixinBindings.put( "unitOfWorkFactory", module.unitOfWorkFactory() ); mixinBindings.put( "valueBuilderFactory", module.valueBuilderFactory() ); mixinBindings.put( "transientBuilderFactory", module.transientBuilderFactory() ); mixinBindings.put( "serviceFinder", module.serviceFinder() ); mixinBindings.put( "typeLookup", module.typeLookup() ); }
@SuppressWarnings( "unchecked" ) public <V> V findConfigurationInstanceFor( ServiceDescriptor serviceModel, Identity serviceIdentity, UnitOfWork uow ) throws InstantiationException { Class<V> configurationType = serviceModel.configurationType(); V configuration; try { configuration = uow.get( configurationType, serviceIdentity ); uow.pause(); } catch( NoSuchEntityException | NoSuchEntityTypeException e ) { EntityDescriptor entityDescriptor = module.typeLookup().lookupEntityModel( configurationType ); if( entityDescriptor == null ) { throw new NoSuchConfigurationTypeException( configurationType, module.descriptor() ); } return (V) initializeConfigurationInstance( entityDescriptor, uow, serviceModel, serviceIdentity ); } return configuration; }
@SuppressWarnings( "unchecked" ) public <V> V findConfigurationInstanceFor( ServiceDescriptor serviceModel, Identity serviceIdentity, UnitOfWork uow ) throws InstantiationException { Class<V> configurationType = serviceModel.configurationType(); V configuration; try { configuration = uow.get( configurationType, serviceIdentity ); uow.pause(); } catch( NoSuchEntityException | NoSuchEntityTypeException e ) { EntityDescriptor entityDescriptor = module.typeLookup().lookupEntityModel( configurationType ); if( entityDescriptor == null ) { throw new NoSuchConfigurationTypeException( configurationType, module.descriptor() ); } return (V) initializeConfigurationInstance( entityDescriptor, uow, serviceModel, serviceIdentity ); } return configuration; }