in src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/BeanReferenceMapConverterImpl.java [179:220]
private void addUuidProperties(Session session, Node parentNode,
CollectionDescriptor collectionDescriptor,
ManageableMap manageableMap)
throws UnsupportedRepositoryOperationException, RepositoryException, VersionException, LockException, ConstraintViolationException {
try {
if (manageableMap == null) {
return;
}
String jcrName = getCollectionJcrName(collectionDescriptor);
Value[] values = new Value[manageableMap.getSize()];
ValueFactory valueFactory = session.getValueFactory();
Map map = (Map) manageableMap.getObjects();
Iterator keyIterator = map.keySet().iterator();
for (int i = 0; i < manageableMap.getSize(); i++) {
String key = (String) keyIterator.next();
Object object = map.get(key);
if (object != null) {
ClassDescriptor classDescriptor = mapper.getClassDescriptorByClass(object.getClass());
FieldDescriptor fieldDescriptor = classDescriptor.getUuidFieldDescriptor();
if (fieldDescriptor == null) {
throw new JcrMappingException("The bean doesn't have an uuid - classdescriptor : "
+ classDescriptor.getClassName());
}
String uuid = (String) ReflectionUtils.getNestedProperty(object, fieldDescriptor.getFieldName());
values[i] = valueFactory.createValue(MapReferenceValueEncoder.encodeKeyAndReference(key, uuid), PropertyType.STRING);
}
}
parentNode.setProperty(jcrName, values);
}
catch (Exception e) {
throw new ObjectContentManagerException("Cannot insert collection field : "
+ collectionDescriptor.getFieldName()
+ " of class "
+ collectionDescriptor.getClassDescriptor().getClassName(), e);
}
}