All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.molgenis.data.elasticsearch.ElasticsearchEntityFactory Maven / Gradle / Ivy

The newest version!
package org.molgenis.data.elasticsearch;

import static java.util.Objects.requireNonNull;

import java.util.Map;

import org.molgenis.data.Entity;
import org.molgenis.data.EntityManager;
import org.molgenis.data.EntityMetaData;
import org.molgenis.data.Fetch;
import org.molgenis.data.elasticsearch.index.EntityToSourceConverter;
import org.molgenis.data.elasticsearch.index.SourceToEntityConverter;
import org.molgenis.data.support.PartialEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Creates entities from Elasticsearch document sources and vice versa.
 */
@Component
public class ElasticsearchEntityFactory
{
	private final EntityManager entityManager;
	private final SourceToEntityConverter sourceToEntityConverter;
	private final EntityToSourceConverter entityToSourceConverter;

	@Autowired
	public ElasticsearchEntityFactory(EntityManager entityManager, SourceToEntityConverter sourceToEntityConverter,
			EntityToSourceConverter entityToSourceConverter)
	{
		this.entityManager = requireNonNull(entityManager);
		this.sourceToEntityConverter = requireNonNull(sourceToEntityConverter);
		this.entityToSourceConverter = requireNonNull(entityToSourceConverter);
	}

	/**
	 * Creates an entity from the given Elasticsearch document source. If a fetch is defined the entity contains only
	 * data for the requested attributes. Wrap such an entity in a {@link PartialEntity} that will retrieve additional
	 * values if requested.
	 * 
	 * @param entityMeta
	 * @param source
	 * @param fetch
	 *            fetch (can be null)
	 * @return
	 */
	public Entity create(EntityMetaData entityMeta, Map source, Fetch fetch)
	{
		Entity entity = sourceToEntityConverter.convert(source, entityMeta);
		if (fetch != null)
		{
			return entityManager.createEntityForPartialEntity(entity, fetch);
		}
		else
		{
			return entity;
		}
	}

	/**
	 * Create Elasticsearch document source from entity
	 * 
	 * @param entityMeta
	 * @param entity
	 * @return Elasticsearch document source
	 */
	public Map create(EntityMetaData entityMeta, Entity entity)
	{
		return entityToSourceConverter.convert(entity, entityMeta);
	}

	EntityManager getEntityManager()
	{
		return entityManager;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy