package org.molgenis.data; import org.molgenis.data.meta.model.EntityType; import java.util.stream.Stream; /** * Entity manager responsible for creating entity references and resolving references of reference attributes. */ public interface EntityManager { /** * Creation mode that defines whether or not to populate entities with auto generated ando/or default values. */ enum CreationMode { POPULATE, NO_POPULATE } /** * Creates an entity. * * @param entityType entity meta data * @param creationMode entity creation mode that defines initial population mode * @return new entity */ Entity create(EntityType entityType, CreationMode creationMode); /** * Creates an entity based on the given fetch. * * @param entityType entity meta data * @param fetch entity data fetch * @return new entity */ Entity createFetch(EntityType entityType, Fetch fetch); /** * Get an instance, whose state may be lazily fetched. If the requested instance does not exist in the repository, * an <code>UnknownEntityException</code> is thrown when the instance state is first accessed. * * @param entityType entity meta data * @param id entity identifier * @return entity */ Entity getReference(EntityType entityType, Object id); /** * Get instances, whose state may be lazily fetched. If a requested instance does not exist in the repository, an * <code>UnknownEntityException</code> is thrown when the instance state is first accessed. * * @param entityType entity meta data * @param ids entity identifiers * @return entities */ Iterable<Entity> getReferences(EntityType entityType, Iterable<?> ids); /** * Resolve entities referenced by a given entity based on provided fetch information. Given entity is modified by * setting references. * * @param entityType entity meta data * @param entity entity * @param fetch entity data fetch * @return entity with resolved references */ Entity resolveReferences(EntityType entityType, Entity entity, Fetch fetch); /** * Resolve entities referenced by a given list of entities based on provided fetch information. Given entities are * modified by setting references. * * @param entityType entity meta data * @param entities entities * @param fetch entity data fetch * @return entities with resolved references */ Stream<Entity> resolveReferences(EntityType entityType, Stream<Entity> entities, Fetch fetch); }