package org.infinispan.query.impl;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.search.query.engine.spi.EntityInfo;
import org.infinispan.AdvancedCache;
import org.infinispan.query.backend.KeyTransformationHandler;
/**
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2011 Red Hat Inc.
* @author Marko Luksa
* @since 5.0
*/
public class EntityLoader implements QueryResultLoader {
private final AdvancedCache<?, ?> cache;
private final KeyTransformationHandler keyTransformationHandler;
public EntityLoader(AdvancedCache<?, ?> cache, KeyTransformationHandler keyTransformationHandler) {
this.keyTransformationHandler = keyTransformationHandler;
this.cache = cache;
}
private Object decodeKey(EntityInfo entityInfo) {
return keyTransformationHandler.stringToKey(entityInfo.getId().toString(), cache.getClassLoader());
}
public Object load(EntityInfo entityInfo) {
return cache.get(decodeKey(entityInfo));
}
public List<Object> load(List<EntityInfo> entityInfos) {
int entitiesSize = entityInfos.size();
Set<Object> keys = new LinkedHashSet<>(entitiesSize);
for (EntityInfo e : entityInfos) {
keys.add(decodeKey(e));
}
Map<?, ?> entries = cache.getAll(keys);
return new ArrayList<>(entries.values());
}
}