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/11/20 21:22:20 UTC
svn commit: r477346 - in /incubator/graffito/trunk/jcr/jcr-mapping/src: dtd/
java/org/apache/portals/graffito/jcr/mapper/model/
java/org/apache/portals/graffito/jcr/persistence/beanconverter/
java/org/apache/portals/graffito/jcr/persistence/beanconvert...
Author: clombart
Date: Mon Nov 20 13:22:18 2006
New Revision: 477346
URL: http://svn.apache.org/viewvc?view=rev&rev=477346
Log:
Review bean converter support :
* Implement GRFT-118. Now the inline is supported with a specific bean converter (InlineBeanConverterImpl).
* review java pck
Added:
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanConverter.java (contents, props changed)
- copied, changed from r469390, incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/BeanConverter.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/AbstractBeanConverterImpl.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/InlineBeanConverterImpl.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/ParentBeanConverterImpl.java (contents, props changed)
- copied, changed from r469390, incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ParentBeanConverterImpl.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/SimpleFieldsHelper.java
Removed:
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/BeanConverter.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/AbstractBeanConverterImpl.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/dtd/graffito-jcr-mapping.dtd
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/BeanDescriptor.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/ClassDescriptor.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/test-config/jcrmapping-auto.xml
incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-beandescriptor.xml
incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-inheritance.xml
incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-testmappings.xml
incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/mapper/DigesterMapperImplTest.java
incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanDescriptorTest.java
incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/FakeBeanConverter.java
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd Mon Nov 20 13:22:18 2006
@@ -94,7 +94,6 @@
* autoRetrieve : If false, the bean associated to this descriptor is not retrieved when the main ojbect is retrieved
* autoUpdate : If false, the bean associated to this descriptor is not updated when the main ojbect is updated
* autoInsert : If false, the bean associated to this descriptor is not inserted when the main ojbect is inserted
- * inline: persist/retrieve bean properties from the current node (if true).
* converter: fully qualified name of the converter class to be used (default is ObjectConverterImpl)
* jcrNodeType: defines the child node type, optional
* jcrAutoCreated (boolean) default is "false"
@@ -111,7 +110,6 @@
autoRetrieve (true|false) "true"
autoUpdate (true|false) "true"
autoInsert (true|false) "true"
- inline (true | false) "false"
converter CDATA #IMPLIED
jcrNodeType CDATA #IMPLIED
jcrAutoCreated (true | false) "false"
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/BeanDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/BeanDescriptor.java?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/BeanDescriptor.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/BeanDescriptor.java Mon Nov 20 13:22:18 2006
@@ -17,7 +17,7 @@
package org.apache.portals.graffito.jcr.mapper.model;
-import org.apache.portals.graffito.jcr.persistence.objectconverter.BeanConverter;
+import org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter;
import org.apache.portals.graffito.jcr.persistence.objectconverter.impl.ObjectConverterImpl;
import org.apache.portals.graffito.jcr.reflection.ReflectionUtils;
@@ -35,8 +35,7 @@
private boolean proxy;
private boolean autoRetrieve = true;
private boolean autoUpdate = true;
- private boolean autoInsert = true;
- private boolean inline;
+ private boolean autoInsert = true;
private String converter;
private BeanConverter beanConverter;
private String jcrNodeType;
@@ -115,24 +114,6 @@
this.autoUpdate = autoUpdate;
}
- /**
- * Are the current bean properties inlined in the parent
- *
- * @return <tt>true</tt> if bean's properties are inlined in the parent node
- */
- public boolean isInline() {
- return this.inline;
- }
-
- /**
- * Sets if the bean's properties should be inlined in the parent
- * instead of being persisted on a subnode
- *
- * @param flag <tt>true</tt> if the bean properties should be inlined
- */
- public void setInline(boolean flag) {
- this.inline = flag;
- }
/**
* Get the <code>BeanConverter</code> fully qualified name or <tt>null</tt>
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/ClassDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/ClassDescriptor.java?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/ClassDescriptor.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/ClassDescriptor.java Mon Nov 20 13:22:18 2006
@@ -354,10 +354,9 @@
*/
public void afterPropertiesSet() {
validateClassName();
- validateBeanFields();
lookupSuperDescriptor();
lookupInheritanceSettings();
-// validateInheritanceSettings();
+
}
private void validateClassName() {
@@ -368,19 +367,6 @@
}
}
- private void validateBeanFields()
- {
- Iterator beanDescriptorIterator = beanDescriptors.values().iterator();
- while (beanDescriptorIterator.hasNext()) {
- BeanDescriptor beanDescriptor = (BeanDescriptor) beanDescriptorIterator.next();
- if (beanDescriptor.isProxy() && beanDescriptor.isInline())
- {
- throw new JcrMappingException("Bean field can not be proxy and inline - class : " + this.className + " - bean field :" + beanDescriptor.getFieldName());
- }
-
- }
-
- }
private void lookupSuperDescriptor() {
if (null != superClassDescriptor) {
Copied: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanConverter.java (from r469390, incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/BeanConverter.java)
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanConverter.java?view=diff&rev=477346&p1=incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/BeanConverter.java&r1=469390&p2=incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanConverter.java&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/BeanConverter.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanConverter.java Mon Nov 20 13:22:18 2006
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.portals.graffito.jcr.persistence.objectconverter;
+package org.apache.portals.graffito.jcr.persistence.beanconverter;
import javax.jcr.Node;
@@ -24,6 +24,7 @@
import org.apache.portals.graffito.jcr.exception.PersistenceException;
import org.apache.portals.graffito.jcr.exception.RepositoryException;
import org.apache.portals.graffito.jcr.mapper.model.BeanDescriptor;
+import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
/**
* Interface describing a custom bean converter.
@@ -35,10 +36,11 @@
* Insert the object.
*
* @param session the JCR session
- * @param parentNode The parent node
- * @param mapper available mappings
- * @param beanName bean name to be inserter
- * @param object bean
+ * @param parentNode The node which will contain the converter bean
+ * @param beanClassDescriptor the Class Descriptor associated to the bean to insert
+ * @param bean the bean to convert( insert into the JCR structure)
+ * @param parentClassDescriptor The Class Descriptor associated to the parent object
+ * @param parent the object which will contain the bean to convert
*
* @throws PersistenceException thrown in case the insert fails; marks a failure due to logic of
* the insert (parent node cannot be accessed, the insert fails, etc.)
@@ -47,17 +49,18 @@
* wrapped in PersistenceException; marks a repository failure
* @throws JcrMappingException throws in case the mapping of the bean is not correct
*/
- void insert(Session session, Node parentNode, BeanDescriptor descriptor, Object object)
+ void insert(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object bean, ClassDescriptor parentClassDescriptor, Object parent)
throws PersistenceException, RepositoryException, JcrMappingException;
/**
* Update repository from bean values.
*
* @param session the JCR session
- * @param parentNode The parent node
- * @param mapper available mappings
- * @param beanName bean name to be updated
- * @param object bean
+ * @param parentNode The node which will contain the converter bean
+ * @param beanClassDescriptor the Class Descriptor associated to the bean to update
+ * @param bean the bean to convert( insert into the JCR structure)
+ * @param parentClassDescriptor The Class Descriptor associated to the parent object
+ * @param parent the object which will contain the bean to convert
*
* @throws PersistenceException thrown in case the update fails; marks a failure due to logic
* of update (parent node cannot be accessed, the update fails, etc.)
@@ -66,7 +69,7 @@
* wrapped in PersistenceException; marks a repository failure
* @throws JcrMappingException throws in case the mapping of the bean is not correct
*/
- void update(Session session, Node parentNode, BeanDescriptor descriptor, Object object)
+ void update(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object bean, ClassDescriptor parentClassDescriptor, Object parent)
throws PersistenceException, RepositoryException, JcrMappingException;
/**
@@ -74,9 +77,9 @@
*
* @param session the JCR session
* @param parentNode The parent node
- * @param mapper available mappings
- * @param beanName bean name to be retrieved
- * @param beanClass class of the bean to be retrieved
+ * @param beanClassDescriptor the Class Descriptor associated to the bean to insert
+ * @param beanClass The bean Class
+ * @param parent The parent which contain the bean to retrieve
*
* @throws PersistenceException thrown in case the bean cannot be retrieved or initialized;
* marks a failure due to logic of retrieval
@@ -85,7 +88,7 @@
* wrapped in PersistenceException; marks a repository failure
* @throws JcrMappingException throws in case the mapping of the bean is not correct
*/
- Object getObject(Session session, Node parentNode, BeanDescriptor descriptor, Class beanClass)
+ Object getObject(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Class beanClass, Object parent)
throws PersistenceException, RepositoryException, JcrMappingException;
@@ -93,9 +96,11 @@
* Remove the bean from the repository.
*
* @param session the JCR session
- * @param parentNode The parent node
- * @param mapper available mappings
- * @param beanName bean name to be retrieved
+ * @param parentNode The node which will contain the converter bean
+ * @param beanClassDescriptor the Class Descriptor associated to the bean to update
+ * @param bean the bean to convert( insert into the JCR structure)
+ * @param parentClassDescriptor The Class Descriptor associated to the parent object
+ * @param parent the object which contains the bean to convert
*
* @throws PersistenceException thrown in case the bean cannot be removed;
* marks a failure due to logic of removal
@@ -104,6 +109,6 @@
* wrapped in PersistenceException; marks a repository failure
* @throws JcrMappingException throws in case the mapping of the bean is not correct
*/
- void remove(Session session, Node parentNode, BeanDescriptor descriptor)
+ void remove(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object bean, ClassDescriptor parentClassDescriptor, Object parent)
throws PersistenceException, RepositoryException, JcrMappingException;
}
Propchange: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanConverter.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/AbstractBeanConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/AbstractBeanConverterImpl.java?view=auto&rev=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/AbstractBeanConverterImpl.java (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/AbstractBeanConverterImpl.java Mon Nov 20 13:22:18 2006
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.beanconverter.impl;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+
+import org.apache.portals.graffito.jcr.exception.JcrMappingException;
+import org.apache.portals.graffito.jcr.exception.PersistenceException;
+import org.apache.portals.graffito.jcr.exception.RepositoryException;
+import org.apache.portals.graffito.jcr.mapper.Mapper;
+import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
+import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverterProvider;
+import org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter;
+import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
+
+public abstract class AbstractBeanConverterImpl implements BeanConverter {
+
+ protected ObjectConverter objectConverter;
+ protected Mapper mapper;
+ protected AtomicTypeConverterProvider atomicTypeConverterProvider;
+
+ public AbstractBeanConverterImpl(Mapper mapper, ObjectConverter objectConverter, AtomicTypeConverterProvider atomicTypeConverterProvider)
+ {
+ this.mapper = mapper;
+ this.objectConverter = objectConverter;
+ this.atomicTypeConverterProvider = atomicTypeConverterProvider;
+ }
+
+ public abstract void insert(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
+ throws PersistenceException, RepositoryException, JcrMappingException;
+
+ public abstract void update(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
+ throws PersistenceException, RepositoryException, JcrMappingException;
+
+ public abstract Object getObject(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Class beanClass, Object parent)
+ throws PersistenceException, RepositoryException,JcrMappingException ;
+
+ public abstract void remove(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
+ throws PersistenceException, RepositoryException, JcrMappingException ;
+}
Added: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/InlineBeanConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/InlineBeanConverterImpl.java?view=auto&rev=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/InlineBeanConverterImpl.java (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/InlineBeanConverterImpl.java Mon Nov 20 13:22:18 2006
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.beanconverter.impl;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+
+import org.apache.portals.graffito.jcr.exception.JcrMappingException;
+import org.apache.portals.graffito.jcr.exception.PersistenceException;
+import org.apache.portals.graffito.jcr.exception.RepositoryException;
+import org.apache.portals.graffito.jcr.mapper.Mapper;
+import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
+import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverterProvider;
+import org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter;
+import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
+import org.apache.portals.graffito.jcr.persistence.objectconverter.impl.SimpleFieldsHelper;
+
+public class InlineBeanConverterImpl extends AbstractBeanConverterImpl implements BeanConverter {
+
+ SimpleFieldsHelper simpleFieldsHelper;
+
+ public InlineBeanConverterImpl(Mapper mapper, ObjectConverter objectConverter, AtomicTypeConverterProvider atomicTypeConverterProvider)
+ {
+ super(mapper, objectConverter, atomicTypeConverterProvider);
+ this.simpleFieldsHelper = new SimpleFieldsHelper(atomicTypeConverterProvider);
+ }
+
+ public void insert(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
+ throws PersistenceException, RepositoryException, JcrMappingException {
+
+ simpleFieldsHelper.storeSimpleFields(session, object, beanClassDescriptor, parentNode);
+ }
+
+ public void update(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
+ throws PersistenceException, RepositoryException, JcrMappingException {
+ simpleFieldsHelper.storeSimpleFields(session, object, beanClassDescriptor, parentNode);
+ }
+
+ public Object getObject(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Class beanClass, Object bean)
+ throws PersistenceException, RepositoryException,JcrMappingException {
+
+ return simpleFieldsHelper.retrieveSimpleFields(session, beanClassDescriptor, parentNode, bean);
+
+ }
+
+ public void remove(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
+ throws PersistenceException, RepositoryException, JcrMappingException {
+
+ simpleFieldsHelper.storeSimpleFields(session, object, beanClassDescriptor, parentNode);
+ }
+
+
+
+}
Copied: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/ParentBeanConverterImpl.java (from r469390, 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/beanconverter/impl/ParentBeanConverterImpl.java?view=diff&rev=477346&p1=incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ParentBeanConverterImpl.java&r1=469390&p2=incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/ParentBeanConverterImpl.java&r2=477346
==============================================================================
--- 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/beanconverter/impl/ParentBeanConverterImpl.java Mon Nov 20 13:22:18 2006
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.portals.graffito.jcr.persistence.objectconverter.impl;
+package org.apache.portals.graffito.jcr.persistence.beanconverter.impl;
import javax.jcr.Node;
import javax.jcr.Session;
@@ -24,28 +24,30 @@
import org.apache.portals.graffito.jcr.exception.JcrMappingException;
import org.apache.portals.graffito.jcr.exception.PersistenceException;
import org.apache.portals.graffito.jcr.exception.RepositoryException;
-import org.apache.portals.graffito.jcr.mapper.model.BeanDescriptor;
-import org.apache.portals.graffito.jcr.persistence.objectconverter.BeanConverter;
+import org.apache.portals.graffito.jcr.mapper.Mapper;
+import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
+import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverterProvider;
+import org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter;
import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
public class ParentBeanConverterImpl extends AbstractBeanConverterImpl implements BeanConverter {
private final static Log log = LogFactory.getLog(ParentBeanConverterImpl.class);
- public ParentBeanConverterImpl(ObjectConverter objectConverter)
+ public ParentBeanConverterImpl(Mapper mapper, ObjectConverter objectConverter, AtomicTypeConverterProvider atomicTypeConverterProvider)
{
- super(objectConverter);
+ super(mapper, objectConverter, atomicTypeConverterProvider);
}
- public void insert(Session session, Node parentNode, BeanDescriptor descriptor, Object object)
+ public void insert(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
throws PersistenceException, RepositoryException, JcrMappingException {
}
- public void update(Session session, Node parentNode, BeanDescriptor descriptor, Object object)
+ public void update(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
throws PersistenceException, RepositoryException, JcrMappingException {
}
- public Object getObject(Session session, Node parentNode,BeanDescriptor descriptor, Class beanClass)
+ public Object getObject(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Class beanClass, Object parent)
throws PersistenceException, RepositoryException,JcrMappingException {
try {
Node grandParentNode = parentNode.getParent();
@@ -61,7 +63,7 @@
}
- public void remove(Session session, Node parentNode, BeanDescriptor descriptor)
+ public void remove(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent)
throws PersistenceException, RepositoryException, JcrMappingException {
}
Propchange: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/beanconverter/impl/ParentBeanConverterImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
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?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- 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 Nov 20 13:22:18 2006
@@ -23,15 +23,11 @@
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-import javax.jcr.ValueFormatException;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeManager;
-import javax.jcr.nodetype.PropertyDefinition;
import javax.jcr.version.VersionException;
import org.apache.commons.logging.Log;
@@ -44,14 +40,12 @@
import org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor;
import org.apache.portals.graffito.jcr.mapper.model.FieldDescriptor;
import org.apache.portals.graffito.jcr.persistence.PersistenceConstant;
-import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverter;
import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverterProvider;
-import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.impl.NullTypeConverterImpl;
+import org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter;
import org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter;
import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection;
import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollectionUtil;
import org.apache.portals.graffito.jcr.persistence.collectionconverter.impl.DefaultCollectionConverterImpl;
-import org.apache.portals.graffito.jcr.persistence.objectconverter.BeanConverter;
import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
import org.apache.portals.graffito.jcr.persistence.objectconverter.ProxyManager;
import org.apache.portals.graffito.jcr.reflection.ReflectionUtils;
@@ -67,13 +61,13 @@
private final static Log log = LogFactory.getLog(ObjectConverterImpl.class);
- private static final AtomicTypeConverter NULL_CONVERTER = new NullTypeConverterImpl();
-
private Mapper mapper;
private AtomicTypeConverterProvider atomicTypeConverterProvider;
private ProxyManager proxyManager;
+
+ private SimpleFieldsHelper simpleFieldsHelp;
/**
* No-arg constructor.
@@ -94,6 +88,7 @@
this.mapper = mapper;
this.atomicTypeConverterProvider = converterProvider;
this.proxyManager = new ProxyManagerImpl();
+ this.simpleFieldsHelp = new SimpleFieldsHelper(atomicTypeConverterProvider);
}
/**
@@ -109,6 +104,7 @@
this.mapper = mapper;
this.atomicTypeConverterProvider = converterProvider;
this.proxyManager = proxyManager;
+ this.simpleFieldsHelp = new SimpleFieldsHelper(atomicTypeConverterProvider);
}
/**
* Set the <code>Mapper</code> used to solve mappings.
@@ -211,7 +207,7 @@
+ object.getClass(), re);
}
- storeSimpleFields(session, object, classDescriptor, objectNode);
+ simpleFieldsHelp.storeSimpleFields(session, object, classDescriptor, objectNode);
insertBeanFields(session, object, classDescriptor, objectNode);
insertCollectionFields(session, object, classDescriptor, objectNode);
}
@@ -249,7 +245,7 @@
checkCompatiblePrimaryNodeTypes(session, objectNode, classDescriptor, false);
- storeSimpleFields(session, object, classDescriptor, objectNode);
+ simpleFieldsHelp.storeSimpleFields(session, object, classDescriptor, objectNode);
updateBeanFields(session, object, classDescriptor, objectNode);
updateCollectionFields(session, object, classDescriptor, objectNode);
} catch (PathNotFoundException pnfe) {
@@ -289,8 +285,7 @@
}
Object object = ReflectionUtils.newInstance(classDescriptor.getClassName());
-
- retrieveSimpleFields(session, classDescriptor, node, object);
+ simpleFieldsHelp.retrieveSimpleFields(session, classDescriptor, node, object);
retrieveBeanFields(session, classDescriptor, node, path, object, false);
retrieveCollectionFields(session, classDescriptor, node, object, false);
@@ -345,7 +340,7 @@
}
- retrieveSimpleFields(session, classDescriptor, node, object);
+ simpleFieldsHelp.retrieveSimpleFields(session, classDescriptor, node, object);
retrieveBeanFields(session, classDescriptor, node, path, object, false);
retrieveCollectionFields(session, classDescriptor, node, object, false);
@@ -547,75 +542,6 @@
}
/**
- * Retrieve simple fields (atomic fields)
- *
- * @throws JcrMappingException
- * @throws org.apache.portals.graffito.jcr.exception.RepositoryException
- */
- private Object retrieveSimpleFields(Session session, ClassDescriptor classDescriptor, Node node, Object object)
- {
- Object initializedBean = object;
- try
- {
- Iterator fieldDescriptorIterator = classDescriptor.getFieldDescriptors().iterator();
-
- while (fieldDescriptorIterator.hasNext())
- {
- FieldDescriptor fieldDescriptor = (FieldDescriptor) fieldDescriptorIterator.next();
-
- String fieldName = fieldDescriptor.getFieldName();
- String propertyName = fieldDescriptor.getJcrName();
-
- if (fieldDescriptor.isPath())
- {
- // HINT: lazy initialize target bean - The bean can be null when it is inline
- if (null == initializedBean)
- {
- initializedBean = ReflectionUtils.newInstance(classDescriptor.getClassName());
- }
-
- ReflectionUtils.setNestedProperty(initializedBean, fieldName, node.getPath());
-
- }
- else
- {
- if (classDescriptor.usesNodeTypePerHierarchyStrategy() && classDescriptor.hasDiscriminator())
- {
- if ( ! node.hasProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME))
- {
- throw new PersistenceException("Class '" + classDescriptor.getClassName() + "' has not a discriminator property.");
- }
- }
- if (node.hasProperty(propertyName))
- {
- Value propValue = node.getProperty(propertyName).getValue();
- // HINT: lazy initialize target bean - The bean can be null when it is inline
- if (null != propValue && null == initializedBean) {
- initializedBean = ReflectionUtils.newInstance(classDescriptor.getClassName());
- }
-
- AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, initializedBean, fieldName);
- Object fieldValue = converter.getObject(propValue);
- ReflectionUtils.setNestedProperty(initializedBean, fieldName, fieldValue);
- }
- else
- {
- log.warn("Class '" + classDescriptor.getClassName() + "' has an unmapped property : " + propertyName);
- }
- }
-
- }
- } catch (ValueFormatException vfe) {
- throw new PersistenceException("Cannot retrieve properties of object " + object + " from node " + node, vfe);
- } catch (RepositoryException re) {
- throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Cannot retrieve properties of object "
- + object + " from node " + node, re);
- }
-
- return initializedBean;
- }
-
- /**
* Retrieve bean fields
*/
private void retrieveBeanFields(Session session, ClassDescriptor classDescriptor, Node node, String path, Object object,
@@ -641,13 +567,12 @@
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())) {
+ if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter())) {
String converterClassName = beanDescriptor.getConverter();
- Object[] param = {this};
+ Object[] param = {this.mapper, this, this.atomicTypeConverterProvider};
+
BeanConverter beanConverter = (BeanConverter) ReflectionUtils.invokeConstructor(converterClassName, param);
- bean = beanConverter.getObject(session, node, beanDescriptor, beanClass);
+ bean = beanConverter.getObject(session, node, mapper.getClassDescriptorByClass(beanClass), beanClass, bean);
} else {
bean = this.getObject(session, path + "/" + beanDescriptor.getJcrName());
}
@@ -704,13 +629,12 @@
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())) {
+ if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter())) {
String converterClassName = beanDescriptor.getConverter();
- Object[] param = {this};
+ Object[] param = {this.mapper, this, this.atomicTypeConverterProvider};
BeanConverter beanConverter = (BeanConverter) ReflectionUtils.invokeConstructor(converterClassName, param);
- beanConverter.insert(session, objectNode, beanDescriptor, object);
+ beanConverter.insert(session, objectNode, mapper.getClassDescriptorByClass(bean.getClass()), bean, classDescriptor, object);
+
} else {
this.insert(session, objectNode, jcrName, bean);
}
@@ -736,29 +660,26 @@
// if the bean is null, remove existing node
if ((bean == null)) {
- 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())) {
+ if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter()))
+ {
String converterClassName = beanDescriptor.getConverter();
- Object[] param = {this};
+ Object[] param = {this.mapper, this, this.atomicTypeConverterProvider};
BeanConverter beanConverter = (BeanConverter) ReflectionUtils
.invokeConstructor(converterClassName, param);
- beanConverter.remove(session, objectNode, beanDescriptor);
+ Class beanClass = ReflectionUtils.getPropertyType(object, beanDescriptor.getFieldName());
+ beanConverter.remove(session, objectNode, mapper.getClassDescriptorByClass(beanClass), bean, classDescriptor, object);
} else {
if (objectNode.hasNode(jcrName)) {
objectNode.getNode(jcrName).remove();
}
}
} else {
- if (beanDescriptor.isInline()) {
- this.storeSimpleFields(session, bean, mapper.getClassDescriptorByClass(bean.getClass()), objectNode);
- } else if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter())) {
+ if (null != beanDescriptor.getConverter() && !"".equals(beanDescriptor.getConverter())) {
String converterClassName = beanDescriptor.getConverter();
- Object[] param = {this};
+ Object[] param = {this.mapper, this, this.atomicTypeConverterProvider};
BeanConverter beanConverter = (BeanConverter) ReflectionUtils
.invokeConstructor(converterClassName, param);
- beanConverter.update(session, objectNode, beanDescriptor, bean);
+ beanConverter.update(session, objectNode, mapper.getClassDescriptorByClass(bean.getClass()), bean, classDescriptor, object);
} else {
this.update(session, objectNode, jcrName, bean);
}
@@ -810,61 +731,6 @@
}
}
- private void storeSimpleFields(Session session, Object object, ClassDescriptor classDescriptor, Node objectNode) {
- try {
- ValueFactory valueFactory = session.getValueFactory();
-
- Iterator fieldDescriptorIterator = classDescriptor.getFieldDescriptors().iterator();
- while (fieldDescriptorIterator.hasNext()) {
- FieldDescriptor fieldDescriptor = (FieldDescriptor) fieldDescriptorIterator.next();
-
- String fieldName = fieldDescriptor.getFieldName();
- String jcrName = fieldDescriptor.getJcrName();
-
- // Of course, Path field is not stored as property
- if (fieldDescriptor.isPath()) {
- continue;
- }
-
- boolean protectedProperty = fieldDescriptor.isJcrProtected();
-
- if (objectNode.hasProperty(jcrName)) {
- protectedProperty = objectNode.getProperty(jcrName).getDefinition().isProtected();
- }
-
- if (!protectedProperty) { // DO NOT TRY TO WRITE PROTECTED PROPERTIES
- Object fieldValue = ReflectionUtils.getNestedProperty(object, fieldName);
- AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, object, fieldName);
- Value value = converter.getValue(valueFactory, fieldValue);
-
- // Check if the node property is "autocreated"
- boolean autoCreated = fieldDescriptor.isJcrAutoCreated();
-
- if (objectNode.hasProperty(jcrName)) {
- autoCreated = objectNode.getProperty(jcrName).getDefinition().isAutoCreated();
- }
-
- if (!autoCreated) {
- // Check if mandatory property are not null
- checkMandatoryProperty(objectNode, fieldDescriptor, value);
- }
-
- objectNode.setProperty(jcrName, value);
- }
- }
- } catch (ValueFormatException vfe) {
- throw new PersistenceException("Cannot persist properties of object " + object + ". Value format exception.", vfe);
- } catch (VersionException ve) {
- throw new PersistenceException("Cannot persist properties of object " + object + ". Versioning exception.", ve);
- } catch (LockException le) {
- throw new PersistenceException("Cannot persist properties of object " + object + " on locked node.", le);
- } catch (ConstraintViolationException cve) {
- throw new PersistenceException("Cannot persist properties of object " + object + ". Constraint violation.", cve);
- } catch (RepositoryException re) {
- throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Cannot persist properties of object "
- + object, re);
- }
- }
private CollectionConverter getCollectionConverter(Session session, CollectionDescriptor collectionDescriptor) {
String className = collectionDescriptor.getCollectionConverter();
@@ -876,45 +742,6 @@
this.mapper});
}
- }
-
- private void checkMandatoryProperty(Node objectNode, FieldDescriptor fieldDescriptor, Value value) throws RepositoryException {
- PropertyDefinition[] propertyDefinitions = objectNode.getPrimaryNodeType().getDeclaredPropertyDefinitions();
- for (int i = 0; i < propertyDefinitions.length; i++) {
- PropertyDefinition definition = propertyDefinitions[i];
- if (definition.getName().equals(fieldDescriptor.getJcrName()) && definition.isMandatory()
- && (definition.isAutoCreated() == false) && (value == null)) {
- throw new PersistenceException("Class of type:" + fieldDescriptor.getClassDescriptor().getClassName()
- + " has property: " + fieldDescriptor.getFieldName() + " declared as JCR property: "
- + fieldDescriptor.getJcrName() + " This property is mandatory but property in bean has value null");
- }
- }
- }
-
- private AtomicTypeConverter getAtomicTypeConverter(FieldDescriptor fd, Object object, String fieldName) {
- Class fieldTypeClass = null;
- // Check if an atomic converter is assigned to the field converter
- String atomicTypeConverterClass = fd.getConverter();
- if (null != atomicTypeConverterClass)
- {
- return (AtomicTypeConverter) ReflectionUtils.newInstance(atomicTypeConverterClass);
- }
- else
- {
- // Get the default atomic converter in function of the classname
- if (null != fd.getFieldTypeClass()) {
- fieldTypeClass = fd.getFieldTypeClass();
- } else if (null != object) {
- fieldTypeClass = ReflectionUtils.getPropertyType(object, fieldName);
- }
-
- if (null != fieldTypeClass) {
- return this.atomicTypeConverterProvider.getAtomicTypeConverter(fieldTypeClass);
- } else {
- return NULL_CONVERTER;
- }
-
- }
}
private ClassDescriptor getClassDescriptor(Class beanClass) {
Added: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/SimpleFieldsHelper.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/SimpleFieldsHelper.java?view=auto&rev=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/SimpleFieldsHelper.java (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/SimpleFieldsHelper.java Mon Nov 20 13:22:18 2006
@@ -0,0 +1,234 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.objectconverter.impl;
+
+import java.util.Iterator;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+import javax.jcr.ValueFormatException;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.PropertyDefinition;
+import javax.jcr.version.VersionException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.portals.graffito.jcr.exception.JcrMappingException;
+import org.apache.portals.graffito.jcr.exception.PersistenceException;
+import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
+import org.apache.portals.graffito.jcr.mapper.model.FieldDescriptor;
+import org.apache.portals.graffito.jcr.persistence.PersistenceConstant;
+import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverter;
+import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverterProvider;
+import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.impl.NullTypeConverterImpl;
+import org.apache.portals.graffito.jcr.reflection.ReflectionUtils;
+
+/**
+ * Helper class used to map simple fields.
+ *
+ * @author <a href="mailto:christophe.lombart@gmail.com">Lombart Christophe </a>
+ *
+ */
+public class SimpleFieldsHelper
+{
+
+ private final static Log log = LogFactory.getLog(SimpleFieldsHelper.class);
+
+ private static final AtomicTypeConverter NULL_CONVERTER = new NullTypeConverterImpl();
+
+ private AtomicTypeConverterProvider atomicTypeConverterProvider;
+
+ /**
+ * Constructor
+ *
+ * @param converterProvider The atomic type converter provider
+ *
+ */
+ public SimpleFieldsHelper(AtomicTypeConverterProvider converterProvider)
+ {
+ this.atomicTypeConverterProvider = converterProvider;
+ }
+
+
+ /**
+ * Retrieve simple fields (atomic fields)
+ *
+ * @throws JcrMappingException
+ * @throws org.apache.portals.graffito.jcr.exception.RepositoryException
+ */
+ public Object retrieveSimpleFields(Session session, ClassDescriptor classDescriptor, Node node, Object object)
+ {
+ Object initializedBean = object;
+ try
+ {
+ Iterator fieldDescriptorIterator = classDescriptor.getFieldDescriptors().iterator();
+
+ while (fieldDescriptorIterator.hasNext())
+ {
+ FieldDescriptor fieldDescriptor = (FieldDescriptor) fieldDescriptorIterator.next();
+
+ String fieldName = fieldDescriptor.getFieldName();
+ String propertyName = fieldDescriptor.getJcrName();
+
+ if (fieldDescriptor.isPath())
+ {
+ // HINT: lazy initialize target bean - The bean can be null when it is inline
+ if (null == initializedBean)
+ {
+ initializedBean = ReflectionUtils.newInstance(classDescriptor.getClassName());
+ }
+
+ ReflectionUtils.setNestedProperty(initializedBean, fieldName, node.getPath());
+
+ }
+ else
+ {
+ if (classDescriptor.usesNodeTypePerHierarchyStrategy() && classDescriptor.hasDiscriminator())
+ {
+ if ( ! node.hasProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME))
+ {
+ throw new PersistenceException("Class '" + classDescriptor.getClassName() + "' has not a discriminator property.");
+ }
+ }
+ if (node.hasProperty(propertyName))
+ {
+ Value propValue = node.getProperty(propertyName).getValue();
+ // HINT: lazy initialize target bean - The bean can be null when it is inline
+ if (null != propValue && null == initializedBean) {
+ initializedBean = ReflectionUtils.newInstance(classDescriptor.getClassName());
+ }
+
+ AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, initializedBean, fieldName);
+ Object fieldValue = converter.getObject(propValue);
+ ReflectionUtils.setNestedProperty(initializedBean, fieldName, fieldValue);
+ }
+ else
+ {
+ log.warn("Class '" + classDescriptor.getClassName() + "' has an unmapped property : " + propertyName);
+ }
+ }
+
+ }
+ } catch (ValueFormatException vfe) {
+ throw new PersistenceException("Cannot retrieve properties of object " + object + " from node " + node, vfe);
+ } catch (RepositoryException re) {
+ throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Cannot retrieve properties of object "
+ + object + " from node " + node, re);
+ }
+
+ return initializedBean;
+ }
+
+ public void storeSimpleFields(Session session, Object object, ClassDescriptor classDescriptor, Node objectNode) {
+ try {
+ ValueFactory valueFactory = session.getValueFactory();
+
+ Iterator fieldDescriptorIterator = classDescriptor.getFieldDescriptors().iterator();
+ while (fieldDescriptorIterator.hasNext()) {
+ FieldDescriptor fieldDescriptor = (FieldDescriptor) fieldDescriptorIterator.next();
+
+ String fieldName = fieldDescriptor.getFieldName();
+ String jcrName = fieldDescriptor.getJcrName();
+
+ // Of course, Path field is not stored as property
+ if (fieldDescriptor.isPath()) {
+ continue;
+ }
+
+ boolean protectedProperty = fieldDescriptor.isJcrProtected();
+
+ if (objectNode.hasProperty(jcrName)) {
+ protectedProperty = objectNode.getProperty(jcrName).getDefinition().isProtected();
+ }
+
+ if (!protectedProperty) { // DO NOT TRY TO WRITE PROTECTED PROPERTIES
+ Object fieldValue = ReflectionUtils.getNestedProperty(object, fieldName);
+ AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, object, fieldName);
+ Value value = converter.getValue(valueFactory, fieldValue);
+
+ // Check if the node property is "autocreated"
+ boolean autoCreated = fieldDescriptor.isJcrAutoCreated();
+
+ if (objectNode.hasProperty(jcrName)) {
+ autoCreated = objectNode.getProperty(jcrName).getDefinition().isAutoCreated();
+ }
+
+ if (!autoCreated) {
+ // Check if mandatory property are not null
+ checkMandatoryProperty(objectNode, fieldDescriptor, value);
+ }
+
+ objectNode.setProperty(jcrName, value);
+ }
+ }
+ } catch (ValueFormatException vfe) {
+ throw new PersistenceException("Cannot persist properties of object " + object + ". Value format exception.", vfe);
+ } catch (VersionException ve) {
+ throw new PersistenceException("Cannot persist properties of object " + object + ". Versioning exception.", ve);
+ } catch (LockException le) {
+ throw new PersistenceException("Cannot persist properties of object " + object + " on locked node.", le);
+ } catch (ConstraintViolationException cve) {
+ throw new PersistenceException("Cannot persist properties of object " + object + ". Constraint violation.", cve);
+ } catch (RepositoryException re) {
+ throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Cannot persist properties of object "
+ + object, re);
+ }
+ }
+
+ private void checkMandatoryProperty(Node objectNode, FieldDescriptor fieldDescriptor, Value value) throws RepositoryException {
+ PropertyDefinition[] propertyDefinitions = objectNode.getPrimaryNodeType().getDeclaredPropertyDefinitions();
+ for (int i = 0; i < propertyDefinitions.length; i++) {
+ PropertyDefinition definition = propertyDefinitions[i];
+ if (definition.getName().equals(fieldDescriptor.getJcrName()) && definition.isMandatory()
+ && (definition.isAutoCreated() == false) && (value == null)) {
+ throw new PersistenceException("Class of type:" + fieldDescriptor.getClassDescriptor().getClassName()
+ + " has property: " + fieldDescriptor.getFieldName() + " declared as JCR property: "
+ + fieldDescriptor.getJcrName() + " This property is mandatory but property in bean has value null");
+ }
+ }
+ }
+ private AtomicTypeConverter getAtomicTypeConverter(FieldDescriptor fd, Object object, String fieldName) {
+ Class fieldTypeClass = null;
+ // Check if an atomic converter is assigned to the field converter
+ String atomicTypeConverterClass = fd.getConverter();
+ if (null != atomicTypeConverterClass)
+ {
+ return (AtomicTypeConverter) ReflectionUtils.newInstance(atomicTypeConverterClass);
+ }
+ else
+ {
+ // Get the default atomic converter in function of the classname
+ if (null != fd.getFieldTypeClass()) {
+ fieldTypeClass = fd.getFieldTypeClass();
+ } else if (null != object) {
+ fieldTypeClass = ReflectionUtils.getPropertyType(object, fieldName);
+ }
+
+ if (null != fieldTypeClass) {
+ return this.atomicTypeConverterProvider.getAtomicTypeConverter(fieldTypeClass);
+ } else {
+ return NULL_CONVERTER;
+ }
+
+ }
+ }
+
+}
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-auto.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-auto.xml?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-auto.xml (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-auto.xml Mon Nov 20 13:22:18 2006
@@ -28,7 +28,7 @@
<field-descriptor fieldName="path" path="true" />
<field-descriptor fieldName="name" jcrName="graffito:name" id="true" />
<bean-descriptor fieldName="parentFolder"
- converter="org.apache.portals.graffito.jcr.persistence.objectconverter.impl.ParentBeanConverterImpl" />
+ converter="org.apache.portals.graffito.jcr.persistence.beanconverter.impl.ParentBeanConverterImpl" />
</class-descriptor>
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-beandescriptor.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-beandescriptor.xml?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-beandescriptor.xml (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-beandescriptor.xml Mon Nov 20 13:22:18 2006
@@ -7,7 +7,7 @@
<field-descriptor fieldName="d1" jcrName="d1" jcrType="String" jcrAutoCreated="false" jcrMandatory="false"
jcrOnParentVersion="IGNORE" jcrProtected="false" jcrMultiple="false" />
- <bean-descriptor fieldName="b1" jcrName="b1" inline="true" />
+ <bean-descriptor fieldName="b1" jcrName="b1" converter="org.apache.portals.graffito.jcr.persistence.beanconverter.impl.InlineBeanConverterImpl" />
</class-descriptor>
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-inheritance.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-inheritance.xml?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-inheritance.xml (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-inheritance.xml Mon Nov 20 13:22:18 2006
@@ -62,7 +62,7 @@
<field-descriptor fieldName="path" path="true" />
<field-descriptor fieldName="name" jcrName="graffito:name" id="true" />
<bean-descriptor fieldName="parentFolder"
- converter="org.apache.portals.graffito.jcr.persistence.objectconverter.impl.ParentBeanConverterImpl" />
+ converter="org.apache.portals.graffito.jcr.persistence.beanconverter.impl.ParentBeanConverterImpl" />
</class-descriptor>
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-testmappings.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-testmappings.xml?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-testmappings.xml (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-testmappings.xml Mon Nov 20 13:22:18 2006
@@ -27,7 +27,7 @@
<bean-descriptor fieldName="b"
jcrName="b"
proxy="false"
- inline="true"
+ converter="org.apache.portals.graffito.jcr.persistence.beanconverter.impl.InlineBeanConverterImpl"
jcrNodeType="nt:unstructured"
jcrAutoCreated="false"
jcrMandatory="false"
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/mapper/DigesterMapperImplTest.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/mapper/DigesterMapperImplTest.java?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/mapper/DigesterMapperImplTest.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/mapper/DigesterMapperImplTest.java Mon Nov 20 13:22:18 2006
@@ -85,9 +85,8 @@
BeanDescriptor beanDescriptor = classDescriptor.getBeanDescriptor("b");
assertNotNull("BeanDescriptor is null", beanDescriptor);
- assertTrue("Invalid jcrName for field b", beanDescriptor .getJcrName().equals("b"));
- assertEquals("Invalid bean-descriptor inline", true, beanDescriptor.isInline());
- assertNull("Invalid bean default converter", beanDescriptor.getConverter());
+ assertTrue("Invalid jcrName for field b", beanDescriptor .getJcrName().equals("b"));
+ assertNotNull("Invalid bean default converter", beanDescriptor.getConverter());
CollectionDescriptor collectionDescriptor = classDescriptor.getCollectionDescriptor("collection");
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanDescriptorTest.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanDescriptorTest.java?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanDescriptorTest.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/BeanDescriptorTest.java Mon Nov 20 13:22:18 2006
@@ -80,7 +80,6 @@
}
public void testInlined() throws Exception {
- System.out.println("inlined");
B expB = new B();
expB.setB1("b1value");
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/FakeBeanConverter.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/FakeBeanConverter.java?view=diff&rev=477346&r1=477345&r2=477346
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/FakeBeanConverter.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/beanconverter/FakeBeanConverter.java Mon Nov 20 13:22:18 2006
@@ -24,17 +24,19 @@
import javax.jcr.Session;
import org.apache.portals.graffito.jcr.exception.PersistenceException;
-import org.apache.portals.graffito.jcr.mapper.model.BeanDescriptor;
+import org.apache.portals.graffito.jcr.mapper.Mapper;
+import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
+import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverterProvider;
+import org.apache.portals.graffito.jcr.persistence.beanconverter.impl.AbstractBeanConverterImpl;
import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
-import org.apache.portals.graffito.jcr.persistence.objectconverter.impl.AbstractBeanConverterImpl;
import org.apache.portals.graffito.jcr.testmodel.B;
public class FakeBeanConverter extends AbstractBeanConverterImpl {
private static List log = new ArrayList();
- public FakeBeanConverter(ObjectConverter objectConverter) {
- super(objectConverter);
+ public FakeBeanConverter(Mapper mapper, ObjectConverter objectConverter, AtomicTypeConverterProvider atomicTypeConverterProvider) {
+ super(mapper, objectConverter, atomicTypeConverterProvider);
}
@@ -44,9 +46,9 @@
}
/**
- * @see org.apache.portals.graffito.jcr.persistence.objectconverter.BeanConverter#insert(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.Mapper, java.lang.String, java.lang.Object)
+ * @see org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter#insert(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.Mapper, java.lang.String, java.lang.Object)
*/
- public void insert(Session session, Node parentNode, BeanDescriptor descriptor, Object object) throws PersistenceException {
+ public void insert(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent) throws PersistenceException {
try {
log.add("insert at path " + parentNode.getPath());
@@ -57,9 +59,9 @@
}
/**
- * @see org.apache.portals.graffito.jcr.persistence.objectconverter.BeanConverter#update(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.Mapper, java.lang.String, java.lang.Object)
+ * @see org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter#update(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.Mapper, java.lang.String, java.lang.Object)
*/
- public void update(Session session, Node parentNode, BeanDescriptor descriptor, Object object) throws PersistenceException {
+ public void update(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent) throws PersistenceException {
try {
log.add("update at path " + parentNode.getPath());
}
@@ -69,9 +71,9 @@
}
/**
- * @see org.apache.portals.graffito.jcr.persistence.objectconverter.BeanConverter#getObject(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.Mapper, java.lang.String, java.lang.Class)
+ * @see org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter#getObject(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.Mapper, java.lang.String, java.lang.Class)
*/
- public Object getObject(Session session, Node parentNode, BeanDescriptor descriptor, Class beanClass) throws PersistenceException {
+ public Object getObject(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Class beanClass, Object parent) throws PersistenceException {
try {
log.add("get from path " + parentNode.getPath());
}
@@ -84,9 +86,9 @@
}
/**
- * @see org.apache.portals.graffito.jcr.persistence.objectconverter.BeanConverter#remove(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.Mapper, java.lang.String)
+ * @see org.apache.portals.graffito.jcr.persistence.beanconverter.BeanConverter#remove(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.Mapper, java.lang.String)
*/
- public void remove(Session session, Node parentNode, BeanDescriptor descriptor) throws PersistenceException {
+ public void remove(Session session, Node parentNode, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent) throws PersistenceException {
try {
log.add("remove from path " + parentNode.getPath());
}