use of org.qi4j.runtime.composite.TransientStateInstance 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.composite.TransientStateInstance 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;
}
Aggregations