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 2005/09/21 18:46:31 UTC

svn commit: r290785 - /incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/DefaultCollectionConverterImpl.java

Author: clombart
Date: Wed Sep 21 11:46:27 2005
New Revision: 290785

URL: http://svn.apache.org/viewcvs?rev=290785&view=rev
Log:
review code format

Modified:
    incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/DefaultCollectionConverterImpl.java

Modified: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/DefaultCollectionConverterImpl.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/DefaultCollectionConverterImpl.java?rev=290785&r1=290784&r2=290785&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/DefaultCollectionConverterImpl.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/DefaultCollectionConverterImpl.java Wed Sep 21 11:46:27 2005
@@ -16,6 +16,7 @@
 
 package org.apache.portals.graffito.jcr.persistence.collectionconverter.impl;
 
+import java.util.HashMap;
 import java.util.Iterator;
 
 import javax.jcr.Node;
@@ -65,7 +66,6 @@
  */
 public class DefaultCollectionConverterImpl extends AbstractCollectionConverterImpl implements CollectionConverter
 {
-        
 
     private static final String COLLECTION_ELEMENT_NAME = "collection-element";
 
@@ -78,17 +78,18 @@
      * 
      * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#insertCollection(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection)
      */
-    public void insertCollection(Session session, Node parentNode, CollectionDescriptor collectionDescriptor, ManageableCollection collection) throws JcrMappingException
+    public void insertCollection(Session session, Node parentNode, CollectionDescriptor collectionDescriptor,
+            ManageableCollection collection) throws JcrMappingException
     {
 
         try
         {
-            
+
             if (collection == null)
             {
-                return ;
+                return;
             }
-            
+
             String jcrName = collectionDescriptor.getJcrName();
 
             if (jcrName == null)
@@ -100,7 +101,8 @@
             Node collectionNode = parentNode.addNode(jcrName);
 
             Iterator collectionIterator = collection.getIterator();
-            ClassDescriptor elementClassDescriptor = mapper.getClassDescriptor(Class.forName(collectionDescriptor.getElementClassName()));
+            ClassDescriptor elementClassDescriptor = mapper.getClassDescriptor(Class.forName(collectionDescriptor
+                    .getElementClassName()));
 
             int elementCollectionCount = 0;
             while (collectionIterator.hasNext())
@@ -111,8 +113,8 @@
                 // If the element object has a unique id => the element jcr node name = the id value 
                 if (elementClassDescriptor.hasIdField())
                 {
-                      String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();
-                      elementJcrName = PropertyUtils.getNestedProperty(item, idFieldName).toString();
+                    String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();
+                    elementJcrName = PropertyUtils.getNestedProperty(item, idFieldName).toString();
                 }
                 else
                 {
@@ -132,113 +134,141 @@
 
     }
 
-
     /**
      * 
      * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#updateCollection(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection)
      */
-    public void updateCollection(Session session, Node parentNode, CollectionDescriptor collectionDescriptor, ManageableCollection collection) throws JcrMappingException
+    public void updateCollection(Session session, Node parentNode, CollectionDescriptor collectionDescriptor,
+            ManageableCollection collection) throws JcrMappingException
     {
         try
         {
-            
+
             String jcrName = collectionDescriptor.getJcrName();
-                                       
+
             if (jcrName == null)
             {
-                throw new JcrMappingException("The JcrName attribute is not defined for the CollectionDescriptor : " + collectionDescriptor.getCollectionConverterClassName());
+                throw new JcrMappingException("The JcrName attribute is not defined for the CollectionDescriptor : "
+                        + collectionDescriptor.getCollectionConverterClassName());
             }
-            
+
             if (collection == null)
             {
                 if (parentNode.hasNode(jcrName))
                 {
                     parentNode.getNode(jcrName).remove();
-                    
+
                 }
                 return;
             }
-            
+
             Node collectionNode = parentNode.getNode(jcrName);
-            ClassDescriptor elementClassDescriptor = mapper.getClassDescriptor(Class.forName(collectionDescriptor.getElementClassName()));
+            ClassDescriptor elementClassDescriptor = mapper.getClassDescriptor(Class.forName(collectionDescriptor
+                    .getElementClassName()));
             Iterator collectionIterator = collection.getIterator();
             int elementCollectionCount = 0;
-            
+
             //  If the collection elements have not an id, it is not possible to find the matching JCR nodes => delete the complete collection             
-            if (! elementClassDescriptor.hasIdField())
+            if (!elementClassDescriptor.hasIdField())
             {
-               collectionNode.remove();
-               collectionNode = parentNode.addNode(jcrName);
+                collectionNode.remove();
+                collectionNode = parentNode.addNode(jcrName);
             }
-            
-            while(collectionIterator.hasNext())
+
+            HashMap updatedItems = new HashMap();
+            while (collectionIterator.hasNext())
             {
                 Object item = collectionIterator.next();
-                elementCollectionCount++;  
-                String elementJcrName = null;
                 
+                elementCollectionCount++;
+                String elementJcrName = null;
+
                 if (elementClassDescriptor.hasIdField())
                 {
-                      // Update existing JCR Node
-                      String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();
-                      elementJcrName = PropertyUtils.getNestedProperty(item, idFieldName).toString();
-                      objectConverter.updateNode(session, collectionNode, elementJcrName, item);
-                      
-                      // Delete JCR nodes that are not present in the collection
-                      
-                      // Add new collection elements
+
+                    String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();
+                    elementJcrName = PropertyUtils.getNestedProperty(item, idFieldName).toString();
+
+                    // Update existing JCR Nodes
+                    if (collectionNode.hasNode(elementJcrName))
+                    {
+                        objectConverter.updateNode(session, collectionNode, elementJcrName, item);
+                    }
+                    else
+                    {
+                        // Add new collection elements
+                        objectConverter.insertNode(session, collectionNode, elementJcrName, item);
+                    }
+                    
+                    updatedItems.put(elementJcrName, item);
+
                 }
                 else
                 {
-                    
+
                     elementCollectionCount++;
                     elementJcrName = COLLECTION_ELEMENT_NAME + elementCollectionCount;
                     objectConverter.insertNode(session, collectionNode, elementJcrName, item);
-                }                
-    
+                }
+
+            }
+
+            // Delete JCR nodes that are not present in the collection
+            if (elementClassDescriptor.hasIdField())
+            {
+                NodeIterator nodeIterator = collectionNode.getNodes();
+                while (nodeIterator.hasNext())
+                {
+                    Node child = nodeIterator.nextNode();
+                    if (! updatedItems.containsKey(child.getName()))
+                    {
+                        child.remove();
+                    }
+                }
             }
         }
         catch (Exception e)
         {
-            throw new JcrMappingException("Impossible to update the collection field : " + collectionDescriptor.getFieldName() + "for " + collectionDescriptor.getElementClassName(), e);            
+            throw new JcrMappingException("Impossible to update the collection field : " + collectionDescriptor.getFieldName()
+                    + "for " + collectionDescriptor.getElementClassName(), e);
         }
-        
-        
-    }
 
+    }
 
     /**
      * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#getCollection(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, java.lang.Class)
      */
-    public ManageableCollection getCollection(Session session, Node parentNode, CollectionDescriptor collectionDescriptor, Class collectionFieldClass) throws JcrMappingException
-    {        
+    public ManageableCollection getCollection(Session session, Node parentNode, CollectionDescriptor collectionDescriptor,
+            Class collectionFieldClass) throws JcrMappingException
+    {
         try
         {
-            String jcrName = collectionDescriptor.getJcrName();            
-            if (! parentNode.hasNode(jcrName))
+            String jcrName = collectionDescriptor.getJcrName();
+            if (!parentNode.hasNode(jcrName))
             {
                 return null;
             }
-            
+
             Node collectionNode = parentNode.getNode(jcrName);
             NodeIterator children = collectionNode.getNodes();
-                        
-            ManageableCollection collection = ManageableCollectionUtil.getManageableCollection(collectionFieldClass);                 
-            
+
+            ManageableCollection collection = ManageableCollectionUtil.getManageableCollection(collectionFieldClass);
+
             while (children.hasNext())
             {
                 Node itemNode = children.nextNode();
-                Object item = objectConverter.getObject(session, Class.forName(collectionDescriptor.getElementClassName()), itemNode.getPath());                                
-                collection.addObject(item);                    
+                Object item = objectConverter.getObject(session, Class.forName(collectionDescriptor.getElementClassName()),
+                        itemNode.getPath());
+                collection.addObject(item);
             }
-            
+
             return collection;
         }
         catch (Exception e)
         {
-            throw new JcrMappingException("Impossible to get the collection field : " + collectionDescriptor.getFieldName() + "for " + collectionDescriptor.getElementClassName(), e);
+            throw new JcrMappingException("Impossible to get the collection field : " + collectionDescriptor.getFieldName()
+                    + "for " + collectionDescriptor.getElementClassName(), e);
         }
     }
-    
 
 }