package org.arquillian.cube; /** * Factory to instantiate container objects * * @author <a href="mailto:rivasdiaz@gmail.com">Ramon Rivas</a> */ public interface ContainerObjectFactory { /** * Creates an instance of the container object. It also creates and starts a cube defined by the container object * class. * * @param containerObjectClass * type of the container object to instantiate * @param <T> * type of the container object * * @return the newly created container object */ <T> T createContainerObject(Class<T> containerObjectClass); /** * Creates an instance of the container object. It also creates and starts a cube defined by the container object * class. Some configuration can be overridden by passing an additional ContainerObjectConfiguration instance. * * @param containerObjectClass * type of the container object to instantiate * @param configuration * allows specifying some configuration parameters * @param <T> * type of the container object * * @return the newly created container object */ <T> T createContainerObject(Class<T> containerObjectClass, ContainerObjectConfiguration configuration); /** * Creates an instance of the container object. It also creates and starts a cube defined by the container object * class. Some configuration can be overridden by passing an additional ContainerObjectConfiguration instance. * * @param containerObjectClass * type of the container object to instantiate * @param configuration * if not null, allows specifying some configuration parameters * @param containerObjectContainer * marks this object as the container of the created container object * @param <T> * type of the container object * * @return the newly created container object */ <T> T createContainerObject(Class<T> containerObjectClass, ContainerObjectConfiguration configuration, Object containerObjectContainer); }