package org.etk.core.rest; import org.etk.core.rest.impl.ApplicationContext; import org.etk.core.rest.impl.ConstructorDescriptor; import org.etk.core.rest.impl.ObjectFactory; import org.etk.core.rest.impl.ObjectModel; /** * Provide object's instance of component that support per-request lifecycle. * * @param <T> ObjectModel extensions * @see ObjectModel * @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a> * @version $Id: $ */ public class PerRequestObjectFactory<T extends ObjectModel> implements ObjectFactory<T> { /** * Object model that at least gives possibility to create object instance. * Should provide full set of available constructors and object fields. * * @see ObjectModel */ protected final T model; /** * @param model any extension of ObectModel */ public PerRequestObjectFactory(T model) { this.model = model; } /** * {@inheritDoc} */ public Object getInstance(ApplicationContext context) { ConstructorDescriptor inj = model.getConstructorDescriptors().get(0); Object object = inj.createInstance(context); for (FieldInjector field : model.getFieldInjectors()) { field.inject(object, context); } return object; } /** * {@inheritDoc} */ public T getObjectModel() { return model; } }