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);
                }

Reply via email to