package org.infinispan.query.impl;
import static java.util.Arrays.stream;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.search.query.engine.spi.EntityInfo;
/**
* @author <a href="mailto:mluksa@redhat.com">Marko Luksa</a>
*/
public class ProjectionLoader implements QueryResultLoader {
private final ProjectionConverter projectionConverter;
private final EntityLoader entityLoader;
public ProjectionLoader(ProjectionConverter projectionConverter, EntityLoader entityLoader) {
this.projectionConverter = projectionConverter;
this.entityLoader = entityLoader;
}
@Override
public List<Object> load(List<EntityInfo> entityInfos) {
List<Object> list = new ArrayList<>(entityInfos.size());
for (EntityInfo entityInfo : entityInfos) {
list.add(load(entityInfo));
}
return list;
}
public Object[] load(EntityInfo entityInfo) {
Object[] projection = entityInfo.getProjection();
if (stream(projection).anyMatch(o -> o == EntityInfo.ENTITY_PLACEHOLDER)) {
entityInfo.populateWithEntityInstance(entityLoader.load(entityInfo));
}
return projectionConverter.convert(projection);
}
}