@Override public UnitOfWork getUnitOfWork( EntityComposite entity ) { EntityInstance instance = (EntityInstance) CompositeInstance.compositeInstanceOf( entity ); return instance.unitOfWork(); } }
@Override public AssociationStateHolder stateOf( ValueComposite composite ) { return ( (ValueInstance) compositeInstanceOf( composite ) ).state(); }
private void prepareBuilderState( Object value ) { ( (ValueInstance) compositeInstanceOf( (Composite) value ) ).prepareBuilderState(); } }
@Override public AssociationStateHolder stateOf( EntityComposite composite ) { return ( (EntityInstance) compositeInstanceOf( composite ) ).state(); }
@Override public EntityState entityStateOf( EntityComposite composite ) { return ( (EntityInstance) compositeInstanceOf( composite ) ).entityState(); }
@Override public TransientDescriptor transientDescriptorFor( Object transsient ) { if( transsient instanceof TransientComposite ) { TransientInstance transientInstance = (TransientInstance) compositeInstanceOf( (Composite) transsient ); return (TransientDescriptor) transientInstance.descriptor(); } throw new IllegalArgumentException( "Wrong type. Must be subtype of " + TransientComposite.class ); }
@Override public StateHolder stateOf( TransientComposite composite ) { return compositeInstanceOf( composite ).state(); }
private static ValueStateInstance getValueStateInstance( Object value ) { return (ValueStateInstance) compositeInstanceOf( (Composite) value ).state(); } }
@Override public ValueDescriptor valueDescriptorFor( Object value ) { if( value instanceof ValueComposite ) { ValueInstance valueInstance = (ValueInstance) compositeInstanceOf( (Composite) value ); return valueInstance.descriptor(); } throw new IllegalArgumentException( "Wrong type. {" + value + "} must be subtype of " + ValueComposite.class ); }
private static EntityState getEntityState( Object entity ) { return ( (EntityInstance) compositeInstanceOf( (Composite) entity ) ).entityState(); }
private void prepareToBuild( Object instance ) { ( (ValueInstance) compositeInstanceOf( (Composite) instance ) ).prepareToBuild(); }
@Override @SuppressWarnings( "unchecked" ) public <T> T get( T entity ) throws NoSuchEntityTypeException { EntityComposite entityComposite = (EntityComposite) entity; EntityInstance compositeInstance = (EntityInstance) compositeInstanceOf( entityComposite ); EntityDescriptor model = compositeInstance.entityModel(); Class<T> type = (Class<T>) compositeInstance.types().findFirst().orElse( null ); return uow.get( compositeInstance.reference(), this, Collections.singletonList( model ), type ); }
@Override public ServiceDescriptor serviceDescriptorFor( Object service ) { if( service instanceof ServiceReferenceInstance ) { ServiceReferenceInstance<?> ref = (ServiceReferenceInstance<?>) service; return ref.serviceDescriptor(); } if( service instanceof ServiceComposite ) { ServiceComposite composite = (ServiceComposite) service; return (ServiceDescriptor) compositeInstanceOf( composite ).descriptor(); } throw new IllegalArgumentException( "Wrong type. Must be subtype of " + ServiceComposite.class + " or " + ServiceReference.class ); }
@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 public ValueType valueTypeOf( ModuleDescriptor module, Object object ) { if( object instanceof ValueComposite ) { ValueInstance valueInstance = (ValueInstance) compositeInstanceOf( (Composite) object ); return valueInstance.descriptor().valueType(); } if( object instanceof EntityComposite ) { return ( (EntityInstance) compositeInstanceOf( (Composite) object ) ).descriptor().valueType(); } if( object instanceof Enum ) { return EnumType.of( ( (Enum) object ).getDeclaringClass() ); } return valueTypeOf( module, object.getClass() ); }
return compositeInstanceOf( (Composite) compositeOrServiceReference ).descriptor();
return compositeInstanceOf( (Composite) compositeOrServiceReferenceOrUow ).module();
EntityInstance instance = (EntityInstance) compositeInstanceOf( (EntityComposite) entity ); EntityState state = instance.entityState(); FunctionStateResolver stateResolver = new FunctionStateResolver( propertyFunction, manyAssocFunction, namedAssocFunction ); EntityModel model = (EntityModel) compositeInstanceOf( (Composite) entity ).descriptor(); stateResolver.populateState( model, state ); return entity;
@Override public void remove( Object entity ) throws LifecycleException { uow.checkOpen(); EntityComposite entityComposite = (EntityComposite) entity; EntityInstance compositeInstance = (EntityInstance) compositeInstanceOf( entityComposite ); if( compositeInstance.status() == EntityStatus.NEW ) { compositeInstance.remove( this ); uow.remove( compositeInstance.reference() ); } else if( compositeInstance.status() == EntityStatus.LOADED || compositeInstance.status() == EntityStatus.UPDATED ) { compositeInstance.remove( this ); } else { throw new NoSuchEntityException( compositeInstance.reference(), compositeInstance.types(), usecase() ); } }
public ValueBuilderWithPrototype( ValueDescriptor compositeModelModule, ModuleInstance currentModule, T prototype ) { valueModel = (ValueModel) compositeModelModule; MixinsModel mixinsModel = valueModel.mixinsModel(); Object[] mixins = mixinsModel.newMixinHolder(); final ValueStateInstance prototypeState = ( (ValueInstance) compositeInstanceOf( (Composite) prototype ) ).state(); StateResolver resolver = new FunctionStateResolver( new PropertyDescriptorFunction( prototypeState ), new AssociationDescriptorEntityReferenceFunction( prototypeState ), new AssociationDescriptorIterableFunction( prototypeState ), new AssociationDescriptorMapFunction( prototypeState ) ); ValueStateInstance state = new ValueStateInstance( compositeModelModule, currentModule, resolver ); ValueInstance valueInstance = new ValueInstance( valueModel, mixins, state ); int i = 0; InjectionContext injectionContext = new InjectionContext( valueInstance, UsesInstance.EMPTY_USES, state ); for( MixinModel mixinModel : mixinsModel.mixinModels() ) { mixins[ i++ ] = mixinModel.newInstance( injectionContext ); } valueInstance.prepareToBuild(); this.prototypeInstance = valueInstance; }