in src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/BeanReferenceMapConverterImpl.java [123:169]
protected ManageableObjects doGetCollection(Session session,
Node parentNode,
CollectionDescriptor collectionDescriptor,
Class collectionFieldClass) throws RepositoryException {
try {
String jcrName = getCollectionJcrName(collectionDescriptor);
if (!parentNode.hasProperty(jcrName)) {
return null;
}
Property property = parentNode.getProperty(jcrName);
Value[] values = property.getValues();
ManageableObjects objects = ManageableObjectsUtil.getManageableObjects(collectionFieldClass);
// For maps of bean references, only Maps are supported
if (!(objects instanceof ManageableMap)) {
throw new JcrMappingException("Impossible to retrieve the attribute "
+ collectionDescriptor.getFieldName() + " in the class "
+ collectionDescriptor.getClassDescriptor().getClassName()
+ " because it is not a map");
}
for (int i = 0; i < values.length; i++) {
String encoded = values[i].getString();
String key = MapReferenceValueEncoder.decodeKey(encoded);
String uuid = MapReferenceValueEncoder.decodeReference(encoded);
String path = session.getNodeByIdentifier(uuid).getPath();
Object object = objectConverter.getObject(session, path);
((ManageableMap) objects).addObject(key, object);
}
return objects;
}
catch (Exception e) {
throw new ObjectContentManagerException("Cannot get the collection field : "
+ collectionDescriptor.getFieldName()
+ "for class " + collectionDescriptor.getClassDescriptor().getClassName(), e);
}
}