use of org.qi4j.runtime.property.PropertyInstance in project qi4j-sdk by Qi4j.
the class TransientBuilderInstance method newInstance.
@Override
public T newInstance() throws ConstructionException {
// Set correct info's (immutable) on the state
for (PropertyDescriptor propertyDescriptor : model.model().state().properties()) {
((PropertyInstance<Object>) state.propertyFor(propertyDescriptor.accessor())).setPropertyInfo((PropertyInfo) propertyDescriptor);
}
model.model().checkConstraints(state);
CompositeInstance compositeInstance = model.model().newInstance(model.module(), uses, state);
return compositeInstance.<T>proxy();
}
use of org.qi4j.runtime.property.PropertyInstance in project qi4j-sdk by Qi4j.
the class ModuleInstance method newTransientBuilder.
// Implementation of TransientBuilderFactory
@Override
public <T> TransientBuilder<T> newTransientBuilder(Class<T> mixinType) throws NoSuchTransientException {
NullArgumentException.validateNotNull("mixinType", mixinType);
ModelModule<TransientModel> modelModule = typeLookup.lookupTransientModel(mixinType);
if (modelModule == null) {
throw new NoSuchTransientException(mixinType.getName(), name());
}
Map<AccessibleObject, Property<?>> properties = new HashMap<>();
for (PropertyModel propertyModel : modelModule.model().state().properties()) {
Property<?> property = new PropertyInstance<>(propertyModel.getBuilderInfo(), propertyModel.initialValue(modelModule.module()));
properties.put(propertyModel.accessor(), property);
}
TransientStateInstance state = new TransientStateInstance(properties);
return new TransientBuilderInstance<>(modelModule, state, UsesInstance.EMPTY_USES);
}
use of org.qi4j.runtime.property.PropertyInstance in project qi4j-sdk by Qi4j.
the class ServiceModel method newInstance.
public ServiceInstance newInstance(final ModuleInstance module) {
Object[] mixins = mixinsModel.newMixinHolder();
Map<AccessibleObject, Property<?>> properties = new HashMap<>();
for (PropertyModel propertyModel : stateModel.properties()) {
Object initialValue = propertyModel.initialValue(module);
if (propertyModel.accessor().equals(identityMethod)) {
initialValue = identity;
}
Property<?> property = new PropertyInstance<>(propertyModel, initialValue);
properties.put(propertyModel.accessor(), property);
}
TransientStateInstance state = new TransientStateInstance(properties);
ServiceInstance compositeInstance = new ServiceInstance(this, module, mixins, state);
// Instantiate all mixins
int i = 0;
UsesInstance uses = UsesInstance.EMPTY_USES.use(this);
InjectionContext injectionContext = new InjectionContext(compositeInstance, uses, state);
for (MixinModel mixinModel : mixinsModel.mixinModels()) {
mixins[i++] = mixinModel.newInstance(injectionContext);
}
return compositeInstance;
}
use of org.qi4j.runtime.property.PropertyInstance in project qi4j-sdk by Qi4j.
the class ValueInstance method prepareBuilderState.
/**
* When a ValueBuilder is finished and is about to instantiate a Value, call this to ensure that the state has correct
* settings, i.e. is immutable.
*/
public void prepareBuilderState() {
for (PropertyModel propertyDescriptor : descriptor().state().properties()) {
PropertyInstance<Object> propertyInstance = (PropertyInstance<Object>) state.propertyFor(propertyDescriptor.accessor());
propertyInstance.prepareBuilderState(propertyDescriptor);
}
for (AssociationModel associationDescriptor : descriptor().state().associations()) {
state().associationFor(associationDescriptor.accessor()).setAssociationInfo(associationDescriptor);
}
for (ManyAssociationModel associationDescriptor : descriptor().state().manyAssociations()) {
state().manyAssociationFor(associationDescriptor.accessor()).setAssociationInfo(associationDescriptor);
}
}
use of org.qi4j.runtime.property.PropertyInstance in project qi4j-sdk by Qi4j.
the class ValueInstance method prepareToBuild.
/**
* When a ValueBuilder is about to start, ensure that all state has builder infos, i.e. they are mutable.
*/
public void prepareToBuild() {
for (PropertyModel propertyDescriptor : descriptor().state().properties()) {
PropertyInstance<Object> propertyInstance = (PropertyInstance<Object>) state.propertyFor(propertyDescriptor.accessor());
propertyInstance.prepareToBuild(propertyDescriptor);
}
for (AssociationModel associationDescriptor : descriptor().state().associations()) {
state().associationFor(associationDescriptor.accessor()).setAssociationInfo(associationDescriptor.getBuilderInfo());
}
for (ManyAssociationModel associationDescriptor : descriptor().state().manyAssociations()) {
state().manyAssociationFor(associationDescriptor.accessor()).setAssociationInfo(associationDescriptor.getBuilderInfo());
}
}
Aggregations