String uuid = sources.get(0).getId();
String entityName = EntityIdCoder.getEntityName(uuid);
ObjEntity entity = resolver.getObjEntity(entityName);
ObjectId id = new EntityIdCoder(entity).toObjectId(uuid);
Object object = Cayenne.objectForQuery(context, new ObjectIdQuery(id));
if (object == null) {
return Collections.emptyMap();
}
else {
return Collections.singletonMap(uuid, object);
}
}
Map<String, SelectQuery<DataObject>> queriesByEntity = new HashMap<String, SelectQuery<DataObject>>();
Map<String, EntityIdCoder> codersByEntity = new HashMap<String, EntityIdCoder>();
for (ObjectIdBatchSourceItem source : sources) {
String uuid = source.getId();
String entityName = EntityIdCoder.getEntityName(uuid);
EntityIdCoder coder = codersByEntity.get(entityName);
SelectQuery<DataObject> query;
if (coder == null) {
coder = new EntityIdCoder(resolver.getObjEntity(entityName));
codersByEntity.put(entityName, coder);
query = new SelectQuery<DataObject>(entityName);
queriesByEntity.put(entityName, query);
}
else {
query = queriesByEntity.get(entityName);
}
ObjectId id = coder.toObjectId(uuid);
Expression idExp = ExpressionFactory.matchAllDbExp(
id.getIdSnapshot(),
Expression.EQUAL_TO);
query.orQualifier(idExp);
}
int capacity = (int) Math.ceil(sources.size() / 0.75d);
Map<String, Object> results = new HashMap<String, Object>(capacity);
for (SelectQuery<DataObject> query : queriesByEntity.values()) {
EntityIdCoder coder = codersByEntity.get(query.getRoot());
List<DataObject> objects = context.performQuery(query);
for (DataObject object : objects) {
String uuid = coder.toStringId(object.getObjectId());
results.put(uuid, object);
}
}
return results;