As a reference here are diffs...
-paddy
Index: BeanReferenceCollectionConverterImpl.java
===================================================================
--- BeanReferenceCollectionConverterImpl.java (revision 566465)
+++ BeanReferenceCollectionConverterImpl.java (working copy)
@@ -168,7 +168,16 @@
}
String uuid = (String)
ReflectionUtils.getNestedProperty(object, fieldDescriptor.getFieldName());
- values[i] =
valueFactory.createValue(uuid, PropertyType.REFERENCE);
+ if (uuid == null) {
+ super.objectConverter.insert(session, object);
+ FieldDescriptor pathDescriptor =
classDescriptor.getPathFieldDescriptor();
+ String path = (String)
ReflectionUtils.getNestedProperty(object, pathDescriptor.getFieldName());
+ object = objectConverter.getObject(session, path);
+ uuid = (String)
ReflectionUtils.getNestedProperty(object, fieldDescriptor.getFieldName());
+ } else {
+ objectConverter.update(session, object);
+ }
+ values[i] = valueFactory.createValue(uuid,
PropertyType.REFERENCE);
}
}
Index: ReferenceBeanConverterImpl.java
===================================================================
--- ReferenceBeanConverterImpl.java (revision 566465)
+++ ReferenceBeanConverterImpl.java (working copy)
@@ -55,14 +55,13 @@
public void insert(Session session, Node parentNode, BeanDescriptor
beanDescriptor, ClassDescriptor beanClassDescriptor, Object object,
ClassDescriptor parentClassDescriptor, Object parent)
throws ObjectContentManagerException,
RepositoryException, JcrMappingException
{
- updateReferenceProperty(parentNode, beanDescriptor,
beanClassDescriptor, object);
-
- }
+ insertOrUpdate(session, parentNode, beanDescriptor,
beanClassDescriptor, object);
+ }
- public void update(Session session, Node parentNode, BeanDescriptor
beanDescriptor, ClassDescriptor beanClassDescriptor, Object object,
ClassDescriptor parentClassDescriptor, Object parent)
+ public void update(Session session, Node parentNode, BeanDescriptor
beanDescriptor, ClassDescriptor beanClassDescriptor, Object object,
ClassDescriptor parentClassDescriptor, Object parent)
throws ObjectContentManagerException,
RepositoryException, JcrMappingException
{
- updateReferenceProperty(parentNode, beanDescriptor,
beanClassDescriptor, object);
+ insertOrUpdate(session, parentNode, beanDescriptor,
beanClassDescriptor, object);
}
public Object getObject(Session session, Node parentNode,
BeanDescriptor beanDescriptor, ClassDescriptor beanClassDescriptor, Class
beanClass, Object parent)
@@ -85,8 +84,37 @@
{
updateReferenceProperty(parentNode, beanDescriptor,
beanClassDescriptor, null);
}
-
- private void updateReferenceProperty(Node parentNode, BeanDescriptor
beanDescriptor,ClassDescriptor beanClassDescriptor, Object object) {
+
+ private void insertOrUpdate(Session session, Node parentNode,
BeanDescriptor beanDescriptor, ClassDescriptor beanClassDescriptor, Object
object) {
+ try {
+ if (object == null)
+ {
+ parentNode.setProperty(beanDescriptor.getJcrName(), (Value)
null);
+ }
+
+ FieldDescriptor fieldDescriptor =
beanClassDescriptor.getUuidFieldDescriptor();
+ if (fieldDescriptor == null)
+ {
+ throw new JcrMappingException("The bean doesn't have an uuid
- classdescriptor : " + beanClassDescriptor.getClassName());
+ }
+
+ String uuid = (String) ReflectionUtils.getNestedProperty(object,
fieldDescriptor.getFieldName());
+ if (uuid == null) {
+ objectConverter.insert(session, object);
+ FieldDescriptor pathDescriptor =
beanClassDescriptor.getPathFieldDescriptor();
+ String path = (String)
ReflectionUtils.getNestedProperty(object, pathDescriptor.getFieldName());
+ object = objectConverter.getObject(session, path);
+ uuid = (String) ReflectionUtils.getNestedProperty(object,
fieldDescriptor.getFieldName());
+ } else {
+ objectConverter.update(session, object);
+ }
+ parentNode.setProperty(beanDescriptor.getJcrName(), uuid,
PropertyType.REFERENCE);
+ } catch (Exception e) {
+ throw new ObjectContentManagerException("Impossible to insert the
bean attribute into the repository", e);
+ }
+ }
+
+ private void updateReferenceProperty(Node parentNode, BeanDescriptor
beanDescriptor,ClassDescriptor beanClassDescriptor, Object object) {
try {
if (object == null)
{
@@ -99,8 +127,8 @@
throw new JcrMappingException("The bean doesn't
have an uuid - classdescriptor : " + beanClassDescriptor.getClassName());
}
- String uuid = (String)
ReflectionUtils.getNestedProperty(object, fieldDescriptor.getFieldName());
- parentNode.setProperty(beanDescriptor.getJcrName(),
uuid, PropertyType.REFERENCE);
+ String uuid = (String)
ReflectionUtils.getNestedProperty(object, fieldDescriptor.getFieldName());
+ parentNode.setProperty(beanDescriptor.getJcrName(), uuid,
PropertyType.REFERENCE);
} catch (Exception e) {
throw new ObjectContentManagerException("Impossible to
insert the bean attribute into the repository", e);
}