incubator-graffito-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clomb...@apache.org
Subject svn commit: r279143 - in /incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter: CollectionConverter.java impl/ impl/AbstractCollectionConverterImpl.java impl/DefaultCollectionConverterImpl.java
Date Tue, 06 Sep 2005 22:01:41 GMT
Author: clombart
Date: Tue Sep  6 15:01:38 2005
New Revision: 279143

URL: http://svn.apache.org/viewcvs?rev=279143&view=rev
Log:
Starting refactoring of the CollectionConverter (not yet finalised)

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

Added: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/CollectionConverter.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/CollectionConverter.java?rev=279143&view=auto
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/CollectionConverter.java
(added)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/CollectionConverter.java
Tue Sep  6 15:01:38 2005
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.portals.graffito.jcr.persistence.collectionconverter;
+
+import java.util.Collection;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+
+import org.apache.portals.graffito.jcr.exception.JcrMappingException;
+import org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor;
+
+/**
+ * Convert any kind of Collection into severals JCR nodes
+ * 
+ * @author <a href="mailto:christophe.lombart@sword-technologies.com">Lombart Christophe
</a>
+ * @version $Id: Exp $
+ */
+public interface CollectionConverter
+{
+
+    public void insertCollection(Session session, Node parentNode, CollectionDescriptor collectionDescriptor,
+            Object object) throws JcrMappingException;
+
+    public void updateCollection(Session session, Node objectNode, CollectionDescriptor collectionDescriptor,
+            Object object) throws JcrMappingException;
+
+    public Collection getCollection(Session session, Node parentNode, CollectionDescriptor
collectionDescriptor,
+            Class collectionFieldClass) throws JcrMappingException;
+
+}
\ No newline at end of file

Added: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java?rev=279143&view=auto
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java
(added)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java
Tue Sep  6 15:01:38 2005
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2000-2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.portals.graffito.jcr.persistence.collectionconverter.impl;
+
+import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
+
+/** 
+ *
+ * @author <a href="mailto:christophe.lombart@gmail.com">Christophe Lombart</a>
+ * 
+ */
+public abstract class AbstractCollectionConverterImpl
+{
+    protected ObjectConverter objectConverter;
+    
+    public AbstractCollectionConverterImpl(ObjectConverter objectConverter)
+    {
+        this.objectConverter = objectConverter;
+    }
+
+
+}

Added: 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=279143&view=auto
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/DefaultCollectionConverterImpl.java
(added)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/DefaultCollectionConverterImpl.java
Tue Sep  6 15:01:38 2005
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2000-2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.portals.graffito.jcr.persistence.collectionconverter.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Session;
+
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.portals.graffito.jcr.exception.JcrMappingException;
+import org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor;
+import org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter;
+import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
+
+/** 
+ *
+ * @author <a href="mailto:christophe.lombart@gmail.com">Christophe Lombart</a>
+ * 
+ */
+public class DefaultCollectionConverterImpl extends AbstractCollectionConverterImpl implements
CollectionConverter
+{
+        
+
+    public DefaultCollectionConverterImpl(ObjectConverter objectConverter)
+    {
+        super(objectConverter);
+    }
+
+    /**
+     * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#insertCollection(javax.jcr.Session,
javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, java.lang.Object)
+     */
+    public void insertCollection(Session session, Node parentNode, CollectionDescriptor collectionDescriptor,
Object object) throws JcrMappingException
+    {
+        
+        try
+        {
+            String jcrName = collectionDescriptor.getJcrName();
+            String fieldIdName = collectionDescriptor.getFieldId();
+            Node collectionNode = null;
+            
+            // If a jcrName is defined for this collection : add or get the node used for
the collection                
+            if (jcrName != null)
+            {
+                collectionNode = parentNode.addNode(jcrName);
+            }
+            else
+            {
+                collectionNode = parentNode; 
+            }
+            
+           
+            Collection collection = (Collection) PropertyUtils.getNestedProperty(object,
collectionDescriptor.getFieldName());
+            
+            Iterator collectionIterator = collection.iterator();
+            while(collectionIterator.hasNext())
+            {
+                Object item = collectionIterator.next();
+                String jcrNameCollection = (String) PropertyUtils.getNestedProperty(item,
fieldIdName);
+                objectConverter.insertNode(session, collectionNode, jcrNameCollection, item);
   
+            }
+        }
+        catch (Exception e)
+        {
+            throw new JcrMappingException("Impossible to insert the collection field : "
+ collectionDescriptor.getFieldName() + "for " + collectionDescriptor.getClassName(), e);
           
+        }
+        
+    }
+
+    /**
+     * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#updateCollection(javax.jcr.Session,
javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, java.lang.Object)
+     */
+    public void updateCollection(Session session, Node objectNode, CollectionDescriptor collectionDescriptor,
Object object) throws JcrMappingException
+    {
+        try
+        {
+            String jcrName = collectionDescriptor.getJcrName();
+            String fieldIdName = collectionDescriptor.getFieldId();
+            Node collectionNode = null;
+            
+            // If a jcrName is defined for this collection : add or get the node used for
the collection                
+            if (jcrName != null)
+            {
+                collectionNode = objectNode.getNode(jcrName);
+            }
+            else
+            {
+                collectionNode = objectNode; 
+            }
+            
+            //TODO : manage null value for the collection
+            Collection collection = (Collection) PropertyUtils.getNestedProperty(object,
collectionDescriptor.getFieldName());
+            
+            Iterator collectionIterator = collection.iterator();
+            while(collectionIterator.hasNext())
+            {
+                Object item = collectionIterator.next();
+                String jcrNameCollection = (String) PropertyUtils.getNestedProperty(item,
fieldIdName);
+                objectConverter.updateNode(session, collectionNode, jcrNameCollection, item);
   
+            }
+        }
+        catch (Exception e)
+        {
+            throw new JcrMappingException("Impossible to update the collection field : "
+ collectionDescriptor.getFieldName() + "for " + collectionDescriptor.getClassName(), 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 Collection getCollection(Session session, Node parentNode, CollectionDescriptor
collectionDescriptor, Class collectionFieldClass) throws JcrMappingException
+    {
+        
+        try
+        {
+            String jcrName = collectionDescriptor.getJcrName();            
+            
+            Node collectionNode = parentNode.getNode(jcrName);
+            NodeIterator children = collectionNode.getNodes();
+                        
+            Collection collection = this.createCollectionObject(collectionFieldClass);  
              
+            
+            while (children.hasNext())
+            {
+                Node itemNode = children.nextNode();
+                Object item = objectConverter.getObject(session, Class.forName(collectionDescriptor.getClassName()),
itemNode.getPath());                                
+                collection.add(item);                    
+            }
+            
+            return collection;
+        }
+        catch (Exception e)
+        {
+            throw new JcrMappingException("Impossible to get the collection field : " + collectionDescriptor.getFieldName()
+ "for " + collectionDescriptor.getClassName(), e);
+        }
+    }
+    
+    private Collection createCollectionObject(Class collectionFieldClass) throws JcrMappingException
+    {
+        if (collectionFieldClass.equals(ArrayList.class))
+        {
+            return new ArrayList();
+        }
+        
+        if (collectionFieldClass.equals(Vector.class))
+        {
+            return new Vector();
+        }        
+        
+        if (collectionFieldClass.equals(Collection.class) || collectionFieldClass.equals(List.class))
+        {
+            return new ArrayList();
+        }
+        
+        throw new JcrMappingException("Unsupported Collection Type : " + collectionFieldClass.getName());

+    }
+
+}



Mime
View raw message