// create a list copy even if it is empty to ensure that we have a
// clean serializable list...
List clientObjects = new ArrayList(serverObjects.size());
if (!serverObjects.isEmpty()) {
ObjectDetachOperation op = new ObjectDetachOperation(serverResolver
.getClientEntityResolver());
Iterator it = serverObjects.iterator();
PrefetchTreeNode prefetchTree = serverMetadata.getPrefetchTree();
while (it.hasNext()) {
Persistent object = (Persistent) it.next();
ObjectId id = object.getObjectId();
// sanity check
if (id == null) {
throw new CayenneRuntimeException(
"Server returned an object without an id: " + object);
}
// have to resolve descriptor here for every object, as
// often a query will not have any info indicating the
// entity type
ClassDescriptor serverDescriptor = serverResolver.getClassDescriptor(id
.getEntityName());
clientObjects.add(op.detach(object, serverDescriptor, prefetchTree));
}
}
return clientObjects;
}