@Override protected Stream<? extends CompositeDescriptor> descriptors( TypeLookup typeLookup ) { return typeLookup.allEntities(); } }
@Override protected Stream<? extends CompositeDescriptor> descriptors( TypeLookup typeLookup ) { return typeLookup.allServices() .filter( descriptor -> descriptor instanceof ServiceDescriptor ) .map( descriptor -> (ServiceDescriptor) descriptor ); } }
protected Stream<? extends CompositeDescriptor> descriptors( TypeLookup typeLookup ) { return typeLookup.allTransients(); } }
@Override public ValueType valueTypeOf( ModuleDescriptor module, Class<?> type ) { ValueDescriptor valueDescriptor = module.typeLookup().lookupValueModel( type ); if( valueDescriptor != null ) { return valueDescriptor.valueType(); } EntityDescriptor entityDescriptor = module.typeLookup().lookupEntityModel( type ); if( entityDescriptor != null ) { return entityDescriptor.valueType(); } return newValueType( type, type, type, module ); }
@Override public <T> EntityBuilder<T> newEntityBuilder( Class<T> type, Identity identity ) throws NoSuchEntityTypeException { EntityDescriptor model = module.typeLookup().lookupEntityModel( type ); if( model == null ) { throw new NoSuchEntityTypeException( type.getName(), module ); } ModuleDescriptor modelModule = model.module(); EntityStore entityStore = ( (ModuleSpi) modelModule.instance() ).entityStore(); // Generate id if necessary if( identity == null ) { IdentityGenerator idGen = ( (ModuleSpi) modelModule.instance() ).identityGenerator(); identity = idGen.generate( model.types().findFirst().orElse( null ) ); } EntityBuilder<T> builder; builder = new EntityBuilderInstance<>( model, this, uow.getEntityStoreUnitOfWork( entityStore ), identity ); return builder; }
@Override public <T> ValueBuilder<T> newValueBuilderWithState( Class<T> mixinType, Function<PropertyDescriptor, Object> propertyFunction, Function<AssociationDescriptor, EntityReference> associationFunction, Function<AssociationDescriptor, Stream<EntityReference>> manyAssociationFunction, Function<AssociationDescriptor, Stream<Map.Entry<String, EntityReference>>> namedAssociationFunction ) { Objects.requireNonNull( propertyFunction, "propertyFunction" ); Objects.requireNonNull( associationFunction, "associationFunction" ); Objects.requireNonNull( manyAssociationFunction, "manyAssociationFunction" ); Objects.requireNonNull( namedAssociationFunction, "namedAssociationFunction" ); ValueDescriptor compositeModelModule = typeLookup.lookupValueModel( mixinType ); if( compositeModelModule == null ) { throw new NoSuchValueTypeException( mixinType.getName(), descriptor() ); } StateResolver stateResolver = new FunctionStateResolver( propertyFunction, associationFunction, manyAssociationFunction, namedAssociationFunction ); return new ValueBuilderWithState<>( compositeModelModule, this, stateResolver ); }
@Override protected Stream<? extends CompositeDescriptor> descriptors( TypeLookup typeLookup ) { return typeLookup.allValues(); } }
@Override public void injectTo( Object instance, Object... uses ) throws ConstructionException { Objects.requireNonNull( instance, "instance" ); ObjectDescriptor model = typeLookup.lookupObjectModel( instance.getClass() ); if( model == null ) { throw new NoSuchObjectTypeException( instance.getClass().getName(), name(), typeLookup.allObjects().flatMap( HasTypes::types ) ); } InjectionContext injectionContext = new InjectionContext( model.module(), UsesInstance.EMPTY_USES.use( uses ) ); ( (ObjectModel) model ).inject( injectionContext, instance ); }
private void checkModel( TypeLookup lookup, AssociationDescriptor model ) { Class<?> rawClass = Classes.RAW_CLASS.apply( model.type() ); List<EntityDescriptor> descriptors = lookup.lookupEntityModels( rawClass ); if( descriptors.size() == 0 ) { throw new NoSuchEntityTypeException( rawClass.getName(), module ); } } }
Objects.requireNonNull( namedAssociationFunction, "namedAssociationFunction" ); EntityDescriptor model = module.typeLookup().lookupEntityModel( type );
@Override @SuppressWarnings( "unchecked" ) public <T> ValueBuilder<T> newValueBuilderWithPrototype( T prototype ) { Objects.requireNonNull( prototype, "prototype" ); ValueInstance valueInstance = (ValueInstance) compositeInstanceOf( (Composite) prototype ); Class<Composite> valueType = (Class<Composite>) valueInstance.types().findFirst().orElse( null ); ValueDescriptor model = typeLookup.lookupValueModel( valueType ); if( model == null ) { throw new NoSuchValueTypeException( valueType.getName(), descriptor() ); } return new ValueBuilderWithPrototype<>( model, this, prototype ); }
@Override protected Stream<? extends CompositeDescriptor> descriptors( TypeLookup typeLookup ) { return typeLookup.allValues(); } }
@Override public <T> T newObject( Class<T> mixinType, Object... uses ) throws NoSuchObjectTypeException { Objects.requireNonNull( mixinType, "mixinType" ); ObjectDescriptor model = typeLookup.lookupObjectModel( mixinType ); if( model == null ) { throw new NoSuchObjectTypeException( mixinType.getName(), name(), typeLookup.allObjects().flatMap( HasTypes::types ) ); } InjectionContext injectionContext = new InjectionContext( model.module(), UsesInstance.EMPTY_USES.use( uses ) ); return mixinType.cast( ( (ObjectModel) model ).newInstance( injectionContext ) ); }
@Override public <T> T get( Class<T> type, Identity identity ) throws NoSuchEntityTypeException, NoSuchEntityException { Iterable<EntityDescriptor> models = module.typeLookup().lookupEntityModels( type ); if( !models.iterator().hasNext() ) { throw new NoSuchEntityTypeException( type.getName(), module ); } return uow.get( EntityReference.create( identity ), this, models, type ); }
@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; }
@Override public <T> ValueBuilder<T> newValueBuilder( Class<T> mixinType ) throws NoSuchValueTypeException { Objects.requireNonNull( mixinType, "mixinType" ); ValueDescriptor compositeModelModule = typeLookup.lookupValueModel( mixinType ); if( compositeModelModule == null ) { throw new NoSuchValueTypeException( mixinType.getName(), descriptor() ); } StateResolver stateResolver = new InitialStateResolver( compositeModelModule.module() ); return new ValueBuilderInstance<>( compositeModelModule, this, stateResolver ); }
@Override protected Stream<? extends CompositeDescriptor> descriptors( TypeLookup typeLookup ) { return typeLookup.allEntities(); } }
protected Stream<? extends CompositeDescriptor> descriptors( TypeLookup typeLookup ) { return typeLookup.allTransients(); } }
@Override protected Stream<? extends CompositeDescriptor> descriptors( TypeLookup typeLookup ) { return typeLookup.allServices() .filter( descriptor -> descriptor instanceof ServiceDescriptor ) .map( descriptor -> (ServiceDescriptor) descriptor ); } }
@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; }