You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-commits@incubator.apache.org by cl...@apache.org on 2006/05/22 20:04:47 UTC

svn commit: r408736 - in /incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence: ./ impl/ objectconverter/ objectconverter/impl/

Author: clombart
Date: Mon May 22 13:04:47 2006
New Revision: 408736

URL: http://svn.apache.org/viewvc?rev=408736&view=rev
Log:
Finalise the  autoInsert, autoUpdate & autoRetrieve features.
AutoRetrieve and proxy are complementary.
Add new methods in the persistenceManager : retrieveMappedAttribute & retrieveAllMappedAttributes. Those methods are usefull if the autoretrieve is false for one ore more object attributes.

Modified:
    incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/PersistenceManager.java
    incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java
    incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/ObjectConverter.java
    incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java
    incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ParentBeanConverterImpl.java

Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/PersistenceManager.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/PersistenceManager.java?rev=408736&r1=408735&r2=408736&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/PersistenceManager.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/PersistenceManager.java Mon May 22 13:04:47 2006
@@ -115,6 +115,23 @@
     
     
     /**
+     * Retrieve the specified attribute  for the given persistent object.
+     * this attribute is either a bean or a collection. This method is usefull if the corresponding descriptor has an autoRetrieve="false"
+     * 
+     * @param object The persistent object
+     * @param attributeName The name of the attribute to retrieve
+     */
+    public void retrieveMappedAttribute(Object object, String attributeName);
+
+    
+    /**
+     * Retrieve all mapped  attributes for the given persistent object.
+     * @param object The persistent object
+     */
+    public void retrieveAllMappedAttributes(Object object);
+    
+    
+    /**
      * Remove an object from a JCR repository
      * @param path the object path
      * @throws PersistenceException when it is not possible to remove the object 

Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java?rev=408736&r1=408735&r2=408736&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java Mon May 22 13:04:47 2006
@@ -263,6 +263,22 @@
     }    
     
     /**
+     * @see org.apache.portals.graffito.jcr.persistence.PersistenceManager#retrieveAllMappedAttributes(Object)
+     */
+    public void retrieveAllMappedAttributes(Object object) {
+		objectConverter.retrieveAllMappedAttributes(session, object);
+      
+	}
+
+    /**
+     * @see org.apache.portals.graffito.jcr.persistence.PersistenceManager#retrieveMappedAttribute(Object, String)
+     */    
+	public void retrieveMappedAttribute(Object object, String attributeName) {
+		objectConverter.retrieveMappedAttribute(session, object, attributeName);
+		
+	}
+
+	/**
      * @see org.apache.portals.graffito.jcr.persistence.PersistenceManager#insert(java.lang.Object)
      */
     public void insert(Object object) {

Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/ObjectConverter.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/ObjectConverter.java?rev=408736&r1=408735&r2=408736&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/ObjectConverter.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/ObjectConverter.java Mon May 22 13:04:47 2006
@@ -72,6 +72,26 @@
      */
     public Object getObject(Session session, Class clazz, String path) throws PersistenceException;
     
+    
+    /**
+     * Retrieve the specified attribute  for the given persistent object.
+     * this attribute is either a bean or a collection. This method is usefull if the corresponding descriptor has an autoRetrieve="false"
+     * 
+     * @param session The JCR session
+     * @param object The persistent object
+     * @param attributeName The name of the attribute to retrieve
+     */
+    public void retrieveMappedAttribute(Session session, Object object, String attributeName);
+
+    
+    /**
+     * Retrieve all mapped  attributes for the given persistent object.
+     * 
+     * @param session The JCR session     
+     * @param object The persistent object
+     */
+    public void retrieveAllMappedAttributes(Session session, Object object);
+    
 	/**
 	 * Insert the object 
 	 * 

Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java?rev=408736&r1=408735&r2=408736&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java Mon May 22 13:04:47 2006
@@ -144,7 +144,7 @@
 
 		String jcrNodeType = classDescriptor.getJcrNodeType();
 		if ((jcrNodeType == null) || jcrNodeType.equals("")) {
-			jcrNodeType= PersistenceConstant.NT_UNSTRUCTURED;
+			jcrNodeType = PersistenceConstant.NT_UNSTRUCTURED;
 		}
 
 		Node objectNode = null;
@@ -160,8 +160,8 @@
 
 		String[] mixinTypes = classDescriptor.getJcrMixinTypes();
 		String mixinTypeName = null;
-		try {						
-			
+		try {
+
 			// Add mixin types
 			if (null != classDescriptor.getJcrMixinTypes()) {
 				for (int i = 0; i < mixinTypes.length; i++) {
@@ -169,34 +169,31 @@
 					objectNode.addMixin(mixinTypeName);
 				}
 			}
-			
+
 			// Add mixin types defined in the associated interfaces 
-			if (! classDescriptor.hasDiscriminator() && classDescriptor.hasInterfaces())
-			{
-				Iterator  interfacesIterator = classDescriptor.getImplements().iterator();
-				while (interfacesIterator.hasNext())
-				{
-					String interfaceName = (String)  interfacesIterator.next();
-					ClassDescriptor interfaceDescriptor =  mapper.getClassDescriptorByClass(ReflectionUtils.forName(interfaceName));
+			if (!classDescriptor.hasDiscriminator() && classDescriptor.hasInterfaces()) {
+				Iterator interfacesIterator = classDescriptor.getImplements().iterator();
+				while (interfacesIterator.hasNext()) {
+					String interfaceName = (String) interfacesIterator.next();
+					ClassDescriptor interfaceDescriptor = mapper
+							.getClassDescriptorByClass(ReflectionUtils.forName(interfaceName));
 					objectNode.addMixin(interfaceDescriptor.getJcrNodeType().trim());
-				}			    
+				}
 			}
-			
+
 			// If required, add the discriminator node type 
-			if (classDescriptor.hasDiscriminator())
-			{
+			if (classDescriptor.hasDiscriminator()) {
 				mixinTypeName = PersistenceConstant.DISCRIMINATOR_NODE_TYPE;
 				objectNode.addMixin(mixinTypeName);
-				objectNode.setProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME, ReflectionUtils.getBeanClass(object).getName());
+				objectNode.setProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME, ReflectionUtils.getBeanClass(object)
+						.getName());
 			}
 		} catch (NoSuchNodeTypeException nsnte) {
-			throw new JcrMappingException(
-					"Unknown mixin type " + mixinTypeName + " for mapped class " + object.getClass(), nsnte);
+			throw new JcrMappingException("Unknown mixin type " + mixinTypeName + " for mapped class " + object.getClass(), nsnte);
 		} catch (RepositoryException re) {
 			throw new PersistenceException("Cannot create new node of type " + jcrNodeType + " from mapped class "
 					+ object.getClass(), re);
 		}
-		
 
 		storeSimpleFields(session, object, classDescriptor, objectNode);
 		insertBeanFields(session, object, classDescriptor, objectNode);
@@ -233,7 +230,7 @@
 			Node objectNode = parentNode.getNode(nodeName);
 
 			checkNodeType(session, classDescriptor);
-			
+
 			checkCompatiblePrimaryNodeTypes(session, objectNode, classDescriptor, false);
 
 			storeSimpleFields(session, object, classDescriptor, objectNode);
@@ -251,38 +248,35 @@
 	 * @see org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter#getObject(javax.jcr.Session,
 	 *      java.lang.Class, java.lang.String)
 	 */
-	public Object getObject(Session session,  String path) {
+	public Object getObject(Session session, String path) {
 		try {
 			if (!session.itemExists(path)) {
 				return null;
 			}
-			
-			ClassDescriptor classDescriptor =null;
+
+			ClassDescriptor classDescriptor = null;
 			Node node = (Node) session.getItem(path);
-			if (node.hasProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME))
-			{
+			if (node.hasProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME)) {
 				String className = node.getProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME).getValue().getString();
-				classDescriptor = mapper.getClassDescriptorByClass(Class.forName(className));				
-			}
-			else
-			{
+				classDescriptor = mapper.getClassDescriptorByClass(Class.forName(className));
+			} else {
 				String nodeType = node.getPrimaryNodeType().getName();
-				if (nodeType.equals(PersistenceConstant.FROZEN_NODE_TYPE))
-				{
+				if (nodeType.equals(PersistenceConstant.FROZEN_NODE_TYPE)) {
 					nodeType = node.getProperty(PersistenceConstant.FROZEN_PRIMARY_TYPE_PROPERTY).getString();
 				}
-			    classDescriptor = mapper.getClassDescriptorByNodeType(nodeType);
+				classDescriptor = mapper.getClassDescriptorByNodeType(nodeType);
 			}
-			
+
 			if (null == classDescriptor) {
-				throw new JcrMappingException("Impossible to find the classdescriptor for " + path + ". There is no discriminator and associated  JCR node type");
+				throw new JcrMappingException("Impossible to find the classdescriptor for " + path
+						+ ". There is no discriminator and associated  JCR node type");
 			}
 
 			Object object = ReflectionUtils.newInstance(classDescriptor.getClassName());
 
 			retrieveSimpleFields(session, classDescriptor, node, object);
-			retrieveBeanFields(session, classDescriptor, node, path, object);
-			retrieveCollectionFields(session, classDescriptor, node, object);
+			retrieveBeanFields(session, classDescriptor, node, path, object, false);
+			retrieveCollectionFields(session, classDescriptor, node, object, false);
 
 			return object;
 		} catch (ClassNotFoundException clnf) {
@@ -310,13 +304,12 @@
 			checkNodeType(session, classDescriptor);
 
 			Node node = (Node) session.getItem(path);
-            if (! classDescriptor.isInterface())
-            {
-			    checkCompatiblePrimaryNodeTypes(session, node, classDescriptor, true);
-            }
-            
+			if (!classDescriptor.isInterface()) {
+				checkCompatiblePrimaryNodeTypes(session, node, classDescriptor, true);
+			}
+
 			Object object = null;
-			if (classDescriptor.usesNodeTypePerHierarchyStrategy()) {				
+			if (classDescriptor.usesNodeTypePerHierarchyStrategy()) {
 				if (!node.hasProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME)) {
 					throw new PersistenceException("Cannot fetch object of type '" + clazz.getName()
 							+ "' using NODETYPE_PER_HIERARCHY. Discriminator property is not present.");
@@ -337,8 +330,8 @@
 			}
 
 			retrieveSimpleFields(session, classDescriptor, node, object);
-			retrieveBeanFields(session, classDescriptor, node, path, object);
-			retrieveCollectionFields(session, classDescriptor, node, object);
+			retrieveBeanFields(session, classDescriptor, node, path, object, false);
+			retrieveCollectionFields(session, classDescriptor, node, object, false);
 
 			return object;
 		} catch (ClassNotFoundException clnf) {
@@ -351,7 +344,60 @@
 		}
 	}
 
-	
+	public void retrieveAllMappedAttributes(Session session, Object object) {
+		String path = null;
+		try {
+			ClassDescriptor classDescriptor = getClassDescriptor(object.getClass());
+			String pathFieldName = classDescriptor.getPathFieldDescriptor().getFieldName();
+			path = (String) ReflectionUtils.getNestedProperty(object, pathFieldName);
+			Node node = (Node) session.getItem(path);
+			retrieveBeanFields(session, classDescriptor, node, path, object, true);
+			retrieveCollectionFields(session, classDescriptor, node, object, true);
+			
+		} catch (PathNotFoundException pnfe) {
+
+			throw new PersistenceException("Impossible to get the object at " + path, pnfe);
+		} catch (RepositoryException re) {
+			throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Impossible to get the object at " + path, re);
+		}
+	}
+
+	public void retrieveMappedAttribute(Session session, Object object, String attributeName) {
+		String path = null;
+		ClassDescriptor classDescriptor = null;
+		try {
+			classDescriptor = getClassDescriptor(object.getClass());
+			String pathFieldName = classDescriptor.getPathFieldDescriptor().getFieldName();
+			path = (String) ReflectionUtils.getNestedProperty(object, pathFieldName);
+			Node node = (Node) session.getItem(path);
+			BeanDescriptor beanDescriptor = classDescriptor.getBeanDescriptor(attributeName);
+			if (beanDescriptor != null)
+			{
+				this.retrieveBeanField(session, beanDescriptor, node, path, object, true);				
+			}
+			// Check if the attribute is a collection
+			else
+			{
+				CollectionDescriptor collectionDescriptor = classDescriptor.getCollectionDescriptor(attributeName);
+				if (collectionDescriptor != null)
+				{
+					this.retrieveCollectionField(session, collectionDescriptor, node, object, true);
+				}
+				else
+				{
+					throw new PersistenceException("Impossible to retrieve the mapped attribute. The attribute '" + 
+							                                                         attributeName + "'  is not a bean or a collection for the class : " + classDescriptor.getClassName());
+				}
+			}
+			
+		} catch (PathNotFoundException pnfe) {
+
+			throw new PersistenceException("Impossible to get the object at " + path, pnfe);
+		} catch (RepositoryException re) {
+			throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Impossible to get the object at " + path, re);
+		}
+	}
+
 	/**
 	 * Validates the node type used by the class descriptor.
 	 * 
@@ -367,29 +413,23 @@
 	private void checkNodeType(Session session, ClassDescriptor classDescriptor) {
 		String jcrTypeName = null;
 		try {
-			
-			
+
 			//Don't check the primary node type for interfaces. They are only associated to mixin node type
-			if ( classDescriptor.isInterface())
-			{
+			if (classDescriptor.isInterface()) {
 				String[] mixinTypes = classDescriptor.getJcrMixinTypes();
-				for (int i=0; i<mixinTypes.length; i++)
-				{
+				for (int i = 0; i < mixinTypes.length; i++) {
 					jcrTypeName = mixinTypes[i];
-				     session.getWorkspace().getNodeTypeManager().getNodeType(jcrTypeName);
+					session.getWorkspace().getNodeTypeManager().getNodeType(jcrTypeName);
 				}
-			}
-			else
-			{
+			} else {
 				jcrTypeName = classDescriptor.getJcrNodeType();
-				if(jcrTypeName != null && !  jcrTypeName.equals(""))
-				{
-				    session.getWorkspace().getNodeTypeManager().getNodeType(jcrTypeName);
+				if (jcrTypeName != null && !jcrTypeName.equals("")) {
+					session.getWorkspace().getNodeTypeManager().getNodeType(jcrTypeName);
 				}
 			}
 		} catch (NoSuchNodeTypeException nsnte) {
-			throw new JcrMappingException("Mapping for class '" + classDescriptor.getClassName() + "' use unknown primary or mixin node type '"
-					+  jcrTypeName  + "'");
+			throw new JcrMappingException("Mapping for class '" + classDescriptor.getClassName()
+					+ "' use unknown primary or mixin node type '" + jcrTypeName + "'");
 		} catch (RepositoryException re) {
 			throw new org.apache.portals.graffito.jcr.exception.RepositoryException(re);
 		}
@@ -415,7 +455,8 @@
 	 * @throws org.apache.portals.graffito.jcr.exception.RepositoryException
 	 *             thrown if an error occured in the underlying repository
 	 */
-	private void checkCompatiblePrimaryNodeTypes(Session session, Node node, ClassDescriptor classDescriptor, boolean checkVersionNode) {
+	private void checkCompatiblePrimaryNodeTypes(Session session, Node node, ClassDescriptor classDescriptor,
+			boolean checkVersionNode) {
 		try {
 			NodeType nodeType = node.getPrimaryNodeType();
 
@@ -449,13 +490,12 @@
 	 *         <tt>false</tt> otherwise
 	 */
 	private boolean checkCompatibleNodeTypes(NodeType nodeType, ClassDescriptor descriptor) {
-		
+
 		//return true if node type is not used
-		if (descriptor.getJcrNodeType() == null ||descriptor.getJcrNodeType().equals("") )
-		{
+		if (descriptor.getJcrNodeType() == null || descriptor.getJcrNodeType().equals("")) {
 			return true;
 		}
-		
+
 		if (nodeType.getName().equals(descriptor.getJcrNodeType())) {
 			return true;
 		}
@@ -559,65 +599,77 @@
 	/**
 	 * Retrieve bean fields
 	 */
-	private void retrieveBeanFields(Session session, ClassDescriptor classDescriptor, Node node, String path, Object object) {
+	private void retrieveBeanFields(Session session, ClassDescriptor classDescriptor, Node node, String path, Object object,
+			boolean forceToRetrieve) {
 		Iterator beanDescriptorIterator = classDescriptor.getBeanDescriptors().iterator();
 		while (beanDescriptorIterator.hasNext()) {
 			BeanDescriptor beanDescriptor = (BeanDescriptor) beanDescriptorIterator.next();
-			if  (! beanDescriptor.isAutoRetrieve())
-			{
-				continue;
-			}
-			
-			String beanName = beanDescriptor.getFieldName();
-			Class beanClass = ReflectionUtils.getPropertyType(object, beanName);
-			Object bean = null;
-			if (beanDescriptor.isProxy()) {
-				bean = proxyManager.createBeanProxy(session, this, beanClass, path + "/" + beanDescriptor.getJcrName());
+			this.retrieveBeanField(session, beanDescriptor, node, path, object, forceToRetrieve);
+		}
+	}
+
+	
+	private void retrieveBeanField(Session session,BeanDescriptor beanDescriptor, Node node, String path, Object object, boolean forceToRetrieve )
+	{
+		if (!beanDescriptor.isAutoRetrieve() && !forceToRetrieve) {
+			return;
+		}
+
+		String beanName = beanDescriptor.getFieldName();
+		Class beanClass = ReflectionUtils.getPropertyType(object, beanName);
+		Object bean = null;
+		if (beanDescriptor.isProxy()) {
+			bean = proxyManager.createBeanProxy(session, this, beanClass, path + "/" + beanDescriptor.getJcrName());
 
+		} else {
+			if (beanDescriptor.isInline()) {
+				bean = this.retrieveSimpleFields(session, mapper.getClassDescriptorByClass(beanClass), node, bean);
+			} else if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter())) {
+				String converterClassName = beanDescriptor.getConverter();
+				Object[] param = {this};
+				BeanConverter beanConverter = (BeanConverter) ReflectionUtils.invokeConstructor(converterClassName, param);
+				bean = beanConverter.getObject(session, node, beanDescriptor, beanClass);
 			} else {
-				if (beanDescriptor.isInline()) {
-					bean = this.retrieveSimpleFields(session, mapper.getClassDescriptorByClass(beanClass), node, bean);
-				} else if (null != beanDescriptor.getConverter() && ! "".equals(beanDescriptor.getConverter())) {
-					String converterClassName =  beanDescriptor.getConverter();
-					Object[] param = {this};
-					BeanConverter beanConverter =(BeanConverter) ReflectionUtils.invokeConstructor(converterClassName,param);
-					bean = beanConverter.getObject(session, node, beanDescriptor, beanClass);
-				} else {
-					bean = this.getObject(session,  path + "/" + beanDescriptor.getJcrName());
-				}
+				bean = this.getObject(session, path + "/" + beanDescriptor.getJcrName());
 			}
-			ReflectionUtils.setNestedProperty(object, beanName, bean);
 		}
+		ReflectionUtils.setNestedProperty(object, beanName, bean);		
 	}
-
+	
+	
+	
 	/**
 	 * Retrieve Collection fields
 	 */
-	private void retrieveCollectionFields(Session session, ClassDescriptor classDescriptor, Node parentNode, Object object) {
+	private void retrieveCollectionFields(Session session, ClassDescriptor classDescriptor, Node parentNode, Object object,
+			boolean forceToRetrieve) {
 		Iterator collectionDescriptorIterator = classDescriptor.getCollectionDescriptors().iterator();
 		while (collectionDescriptorIterator.hasNext()) {
 			CollectionDescriptor collectionDescriptor = (CollectionDescriptor) collectionDescriptorIterator.next();
-			if  (! collectionDescriptor.isAutoRetrieve())
-			{
-				continue;
-			}
-			
-			CollectionConverter collectionConverter = this.getCollectionConverter(session, collectionDescriptor);
-			Class collectionFieldClass = ReflectionUtils.getPropertyType(object, collectionDescriptor.getFieldName());
-			ManageableCollection collection = null;
-			if (collectionDescriptor.isProxy()) {
-				collection = (ManageableCollection)  proxyManager.createCollectionProxy(session, collectionConverter, parentNode, collectionDescriptor,collectionFieldClass);
-
-			}
-			else 
-			{
-			     collection = collectionConverter.getCollection(session, parentNode, collectionDescriptor,	collectionFieldClass);
-			}
-			
-			ReflectionUtils.setNestedProperty(object, collectionDescriptor.getFieldName(), collection);
+			this.retrieveCollectionField(session, collectionDescriptor, parentNode, object, forceToRetrieve);			
 		}
 	}
 
+	private void retrieveCollectionField(Session session, CollectionDescriptor collectionDescriptor, Node parentNode, Object object, boolean forceToRetrieve)
+	{
+		if (!collectionDescriptor.isAutoRetrieve() && !forceToRetrieve) {
+			return;
+		}
+
+		CollectionConverter collectionConverter = this.getCollectionConverter(session, collectionDescriptor);
+		Class collectionFieldClass = ReflectionUtils.getPropertyType(object, collectionDescriptor.getFieldName());
+		ManageableCollection collection = null;
+		if (collectionDescriptor.isProxy()) {
+			collection = (ManageableCollection) proxyManager.createCollectionProxy(session, collectionConverter, parentNode,
+					collectionDescriptor, collectionFieldClass);
+
+		} else {
+			collection = collectionConverter.getCollection(session, parentNode, collectionDescriptor, collectionFieldClass);
+		}
+
+		ReflectionUtils.setNestedProperty(object, collectionDescriptor.getFieldName(), collection);		
+	}
+	
 	/**
 	 * Insert Bean fields
 	 */
@@ -625,21 +677,20 @@
 		Iterator beanDescriptorIterator = classDescriptor.getBeanDescriptors().iterator();
 		while (beanDescriptorIterator.hasNext()) {
 			BeanDescriptor beanDescriptor = (BeanDescriptor) beanDescriptorIterator.next();
-			
-			if  (! beanDescriptor.isAutoInsert())
-			{
+
+			if (!beanDescriptor.isAutoInsert()) {
 				continue;
 			}
-			
+
 			String jcrName = beanDescriptor.getJcrName();
 			Object bean = ReflectionUtils.getNestedProperty(object, beanDescriptor.getFieldName());
 			if (bean != null) {
 				if (beanDescriptor.isInline()) {
 					this.storeSimpleFields(session, bean, mapper.getClassDescriptorByClass(bean.getClass()), objectNode);
-				} else if (null != beanDescriptor.getConverter() && ! "".equals(beanDescriptor.getConverter())) {
-					String converterClassName =  beanDescriptor.getConverter();
+				} else if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter())) {
+					String converterClassName = beanDescriptor.getConverter();
 					Object[] param = {this};
-					BeanConverter beanConverter =(BeanConverter) ReflectionUtils.invokeConstructor(converterClassName,param);
+					BeanConverter beanConverter = (BeanConverter) ReflectionUtils.invokeConstructor(converterClassName, param);
 					beanConverter.insert(session, objectNode, beanDescriptor, object);
 				} else {
 					this.insert(session, objectNode, jcrName, bean);
@@ -657,11 +708,10 @@
 			Iterator beanDescriptorIterator = classDescriptor.getBeanDescriptors().iterator();
 			while (beanDescriptorIterator.hasNext()) {
 				BeanDescriptor beanDescriptor = (BeanDescriptor) beanDescriptorIterator.next();
-				if  (! beanDescriptor.isAutoUpdate())
-				{
+				if (!beanDescriptor.isAutoUpdate()) {
 					continue;
 				}
-				
+
 				jcrName = beanDescriptor.getJcrName();
 				Object bean = ReflectionUtils.getNestedProperty(object, beanDescriptor.getFieldName());
 
@@ -670,10 +720,11 @@
 					if (beanDescriptor.isInline()) {
 						Class beanClass = ReflectionUtils.getPropertyType(object, beanDescriptor.getFieldName());
 						this.storeSimpleFields(session, bean, mapper.getClassDescriptorByClass(beanClass), objectNode);
-					} else if (null != beanDescriptor.getConverter() && ! "".equals(beanDescriptor.getConverter())) {
-						String converterClassName =  beanDescriptor.getConverter();
+					} else if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter())) {
+						String converterClassName = beanDescriptor.getConverter();
 						Object[] param = {this};
-						BeanConverter beanConverter =(BeanConverter) ReflectionUtils.invokeConstructor(converterClassName,param);
+						BeanConverter beanConverter = (BeanConverter) ReflectionUtils
+								.invokeConstructor(converterClassName, param);
 						beanConverter.remove(session, objectNode, beanDescriptor);
 					} else {
 						if (objectNode.hasNode(jcrName)) {
@@ -683,10 +734,11 @@
 				} else {
 					if (beanDescriptor.isInline()) {
 						this.storeSimpleFields(session, bean, mapper.getClassDescriptorByClass(bean.getClass()), objectNode);
-					} else if (null != beanDescriptor.getConverter() && ! "".equals(beanDescriptor.getConverter())) {
-						String converterClassName =  beanDescriptor.getConverter();
+					} else if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter())) {
+						String converterClassName = beanDescriptor.getConverter();
 						Object[] param = {this};
-						BeanConverter beanConverter =(BeanConverter) ReflectionUtils.invokeConstructor(converterClassName,param);
+						BeanConverter beanConverter = (BeanConverter) ReflectionUtils
+								.invokeConstructor(converterClassName, param);
 						beanConverter.update(session, objectNode, beanDescriptor, bean);
 					} else {
 						this.update(session, objectNode, jcrName, bean);
@@ -709,12 +761,11 @@
 
 		while (collectionDescriptorIterator.hasNext()) {
 			CollectionDescriptor collectionDescriptor = (CollectionDescriptor) collectionDescriptorIterator.next();
-			
-			if  (! collectionDescriptor.isAutoInsert())
-			{
+
+			if (!collectionDescriptor.isAutoInsert()) {
 				continue;
 			}
-			
+
 			CollectionConverter collectionConverter = this.getCollectionConverter(session, collectionDescriptor);
 			Object collection = ReflectionUtils.getNestedProperty(object, collectionDescriptor.getFieldName());
 			ManageableCollection manageableCollection = ManageableCollectionUtil.getManageableCollection(collection);
@@ -728,11 +779,10 @@
 
 		while (collectionDescriptorIterator.hasNext()) {
 			CollectionDescriptor collectionDescriptor = (CollectionDescriptor) collectionDescriptorIterator.next();
-			if  (! collectionDescriptor.isAutoUpdate())
-			{
+			if (!collectionDescriptor.isAutoUpdate()) {
 				continue;
 			}
-			
+
 			CollectionConverter collectionConverter = this.getCollectionConverter(session, collectionDescriptor);
 			Object collection = ReflectionUtils.getNestedProperty(object, collectionDescriptor.getFieldName());
 			ManageableCollection manageableCollection = ManageableCollectionUtil.getManageableCollection(collection);
@@ -845,6 +895,6 @@
 		}
 
 		return classDescriptor;
-	}	
-	
+	}
+
 }

Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ParentBeanConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ParentBeanConverterImpl.java?rev=408736&r1=408735&r2=408736&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ParentBeanConverterImpl.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ParentBeanConverterImpl.java Mon May 22 13:04:47 2006
@@ -46,8 +46,7 @@
 
 	public Object getObject(Session session, Node parentNode,BeanDescriptor descriptor, Class beanClass)
 			throws PersistenceException, RepositoryException,JcrMappingException {
-        try {
-			log.debug("ParentBeanConverter  - path : " +parentNode.getPath());
+        try {			
 			Node grandParentNode = parentNode.getParent();
 			if (grandParentNode.getPath().equals("/"))
 			{