You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by fm...@apache.org on 2007/09/12 11:47:41 UTC

svn commit: r574864 - in /jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src: main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ test/java/org/apache/jackrabbit/ocm/ test/java/org/apache/jackrabbit/ocm/manager/atomic/ test/j...

Author: fmeschbe
Date: Wed Sep 12 02:47:40 2007
New Revision: 574864

URL: http://svn.apache.org/viewvc?rev=574864&view=rev
Log:
JCR-1119 SimpleFieldsHelper emits a lot warnings

Added:
    jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/manager/atomic/DefaultValueTest.java
    jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/testmodel/Default.java
    jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/jcrmapping-default.xml
Modified:
    jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java
    jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java
    jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/nodetypes/custom_nodetypes.xml

Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java?rev=574864&r1=574863&r2=574864&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/SimpleFieldsHelper.java Wed Sep 12 02:47:40 2007
@@ -33,7 +33,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.ocm.exception.JcrMappingException;
 import org.apache.jackrabbit.ocm.exception.ObjectContentManagerException;
 import org.apache.jackrabbit.ocm.manager.ManagerConstant;
 import org.apache.jackrabbit.ocm.manager.atomictypeconverter.AtomicTypeConverter;
@@ -134,25 +133,51 @@
 
 	private Object retrieveSimpleField(ClassDescriptor classDescriptor, Node node, Object initializedBean, FieldDescriptor fieldDescriptor, String fieldName, String propertyName) throws RepositoryException, ValueFormatException, PathNotFoundException {
 
+	    Value propValue;
 		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);
+			propValue = node.getProperty(propertyName).getValue();
 			
 		} 
-		else 
+		else if (fieldDescriptor.getJcrDefaultValue() != null)
 		{
-			log.warn("Class '" + classDescriptor.getClassName() + "' has an unmapped property : " 	+ propertyName);
+		    ValueFactory vf = node.getSession().getValueFactory();
+		    propValue = vf.createValue(fieldDescriptor.getJcrDefaultValue());
 		}
-		return initializedBean;
+		else
+		{
+		    PropertyDefinition propDef = getPropertyDefinition(node, propertyName);
+		    
+		    if (propDef != null && propDef.getDefaultValues() != null && propDef.getDefaultValues().length == 1)
+		    {
+                log.debug("retrieveSimpleField: Use default value from property definition for missing mapped property " + propertyName + " of class '" + classDescriptor.getClassName() + "'");
+		        propValue = propDef.getDefaultValues()[0];
+		    } else
+		    {
+                log.debug("retrieveSimpleField: No default value available for missing mapped property " + propertyName + " of class '" + classDescriptor.getClassName() + "'");
+		        propValue = null;
+		    }
+		}
+		
+        // HINT: lazy initialize target bean - The bean can be null when it is inline
+		if (initializedBean == null)
+		{
+		    
+		    // if we do not have a value, we do nothing at all and just return null
+		    if (propValue == null)
+		    {
+		        return null;
+		    }
+		    
+		    // otherwise create the bean to set the value
+		    initializedBean = ReflectionUtils.newInstance(classDescriptor.getClassName());
+		}
+
+        AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, initializedBean, fieldName);
+        Object fieldValue = (propValue != null) ? converter.getObject(propValue) : null;
+        ReflectionUtils.setNestedProperty(initializedBean, fieldName, fieldValue);
+
+        return initializedBean;
 	}
 	
 	public void storeSimpleFields(Session session, Object object, ClassDescriptor classDescriptor, Node objectNode) {
@@ -225,46 +250,39 @@
 
 		// Check if the property is defined as protected in the JCR repo
 		
-		// 1. Check in the primary node type
-		PropertyDefinition[] propertyDefinitions = objectNode.getPrimaryNodeType().getPropertyDefinitions();
-		for (int i = 0; i < propertyDefinitions.length; i++) {
-			PropertyDefinition definition = propertyDefinitions[i];
-			if (definition.getName().equals(fieldDescriptor.getJcrName()))
-			{
-			    return definition.isProtected();
-			}
+		// 1. Check if the property already exists and may be queried
+		if (objectNode.hasProperty(jcrName))
+		{
+		    return objectNode.getProperty(jcrName).getDefinition().isProtected();
 		}
-		
-		// 2. Check in the secondary node types
-		NodeType[] nodeTypes =  objectNode.getMixinNodeTypes();
-		for(int nodeTypeIndex = 0; nodeTypeIndex < nodeTypes.length; nodeTypeIndex++)
+		    
+		// 2. Find a definition for the property and checks its protected status
+		PropertyDefinition definition = getPropertyDefinition(objectNode, jcrName);
+		if (definition != null)
 		{
-			propertyDefinitions = nodeTypes[nodeTypeIndex].getPropertyDefinitions();
-			for (int propDefIndex = 0; propDefIndex < propertyDefinitions.length; propDefIndex++) {
-				PropertyDefinition definition = propertyDefinitions[propDefIndex];
-				if (definition.getName().equals(fieldDescriptor.getJcrName()))
-				{
-				    return definition.isProtected();
-				}
-			}
+		    return definition.isProtected();
 		}
 		
         // This property is not defined in one of the node types
-		return false;
-		
+		return false;		
 	}
 	
 	private void checkProperty(Node objectNode, FieldDescriptor fieldDescriptor, Value value) throws RepositoryException {
-		PropertyDefinition[] propertyDefinitions = objectNode.getPrimaryNodeType().getPropertyDefinitions();
-		for (int i = 0; i < propertyDefinitions.length; i++) {
-			PropertyDefinition definition = propertyDefinitions[i];
-			if (definition.getName().equals(fieldDescriptor.getJcrName()) && definition.isMandatory() && (value == null)) {
-				throw new ObjectContentManagerException("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");
-			}
-		}
+	    if (value == null)
+	    {
+	        PropertyDefinition definition = getPropertyDefinition(objectNode, fieldDescriptor.getJcrName());
+	        if (definition != null)
+	        {
+	            if (definition.isMandatory() && !definition.isAutoCreated())
+	            {
+	                throw new ObjectContentManagerException("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
@@ -288,5 +306,108 @@
 			
 		}
 	}
+	
+	/**
+	 * Returns the <code>PropertyDefinition</code> for the name property in
+	 * the given node type. If the node type has no matching node type
+	 * definition <code>null</code> is returned.
+	 * <p>
+	 * This method scans as follows: If a PropertyDefinition with the exact
+	 * name is found which is single-valued, this property definition is
+	 * returned. Otherwise the first residual property definition which is
+	 * single-valued is returned. Otherwise <code>null</code> is returned.
+	 * 
+	 * @param nodeType The <code>NodeType</code> to search for matching node
+	 *         type definitions for the given property.
+	 * @param propertyName The name of the property for which the
+	 *         <code>PropertyDefinition</code> is requested.
+	 *         
+	 * @return The <code>PropertyDefinition</code> for the given property or
+	 *         <code>null</code> if none can be found in the type.
+	 */
+	private PropertyDefinition getPropertyDefinition(NodeType nodeType, String propertyName) {
+        PropertyDefinition[] pd = nodeType.getPropertyDefinitions();
+        PropertyDefinition candidate = null;
+        for (int i=0; i < pd.length; i++)
+        {
+            // ignore multi-value properties
+            if (pd[i].isMultiple())
+            {
+                continue;
+            }
+            
+            // if we have an exact match, use this and return
+            if (propertyName.equals(pd[i].getName()))
+            {
+                return pd[i];
+            }
+            
+            // if we have a residual property definition consider as candidate
+            if (pd[i].getName() == null && candidate == null)
+            {
+                candidate = pd[i];
+            }
+        }
+        
+        // return the potential residal candidate definition
+        return candidate;
+	}
+
+	
+	/**
+	 * Returns a <code>PropertyDefinition</code> for the given property name.
+	 * This method first looks for a matching property definition in the
+	 * primary node type and then in the list of mixin node types of the node.
+	 * Only single-valued property definitions are considered by this method.
+	 * If a definition whose name is the same as the <code>propertyName</code>
+	 * is found, this definition is returned. Otherwise a residual property
+	 * definition may be returned.
+	 * 
+	 * @param node The <code>Node</code> whose primary and mixin node types are
+	 *         to be scanned for a single-valued property definition.
+	 * @param propertyName The name of the property for which the property
+	 *         definition is to be returned.
+	 *         
+	 * @return The <code>PropertyDefinition</code> for the named property or
+	 *         <code>null</code> if no single-valued exact or residual property
+	 *         definintion may be found in the node's primary or mixin node
+	 *         types.
+	 *         
+	 * @throws RepositoryException If an error occurrs accessing the primary or
+	 *         mixin node types of the node.
+	 */
+	private PropertyDefinition getPropertyDefinition(Node node, String propertyName) throws RepositoryException {
+	    
+	    // try to find the definition in the primary node type
+        NodeType nt = node.getPrimaryNodeType();
+        PropertyDefinition propDef = getPropertyDefinition(nt, propertyName);
+        
+        // return the definition if it is not residual
+        if (propDef != null && propDef.getName() != null)
+        {
+            return propDef;
+        }
+        
+        // otherwise look it up in any of the mixin node types
+        NodeType[] mixins = node.getMixinNodeTypes();
+        for (int i = 0; mixins != null && i < mixins.length; i++)
+        {
+            PropertyDefinition candidate = getPropertyDefinition(mixins[i], propertyName);
+            
+            // use this property definition if not residual
+            if (candidate != null && candidate.getName() != null)
+            {
+                return propDef;
+            }
+            
+            // otherwise use this if we do not have a candidate yet
+            if (propDef == null)
+            {
+                propDef = candidate;
+            }
+        }
 
+        // nothing found
+        return propDef;
+	}
 }

Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java?rev=574864&r1=574863&r2=574864&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java Wed Sep 12 02:47:40 2007
@@ -171,7 +171,8 @@
 		Repository repository = RepositoryUtil.getRepository("repositoryTest");
 		String[] files = { "./src/test/test-config/jcrmapping.xml", 
 						   "./src/test/test-config/jcrmapping-proxy.xml",
-                           "./src/test/test-config/jcrmapping-atomic.xml",
+						   "./src/test/test-config/jcrmapping-atomic.xml",
+                           "./src/test/test-config/jcrmapping-default.xml",
                            "./src/test/test-config/jcrmapping-beandescriptor.xml",
                            "./src/test/test-config/jcrmapping-inheritance.xml",
                            "./src/test/test-config/jcrmapping-jcrnodetypes.xml", 

Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/manager/atomic/DefaultValueTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/manager/atomic/DefaultValueTest.java?rev=574864&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/manager/atomic/DefaultValueTest.java (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/manager/atomic/DefaultValueTest.java Wed Sep 12 02:47:40 2007
@@ -0,0 +1,141 @@
+/*
+ * 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.jackrabbit.ocm.manager.atomic;
+
+import javax.jcr.Node;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.ocm.RepositoryLifecycleTestSetup;
+import org.apache.jackrabbit.ocm.TestBase;
+import org.apache.jackrabbit.ocm.manager.ObjectContentManager;
+import org.apache.jackrabbit.ocm.testmodel.Default;
+
+/**
+ * Test Default value assignement
+ */
+public class DefaultValueTest extends TestBase
+{
+    private final static Log log = LogFactory.getLog(DefaultValueTest.class);
+
+    /**
+     * <p>Defines the test case name for junit.</p>
+     * @param testName The test case name.
+     */
+    public DefaultValueTest(String testName) throws Exception
+    {
+        super(testName);
+    }
+
+    public static Test suite()
+    {
+        // All methods starting with "test" will be executed in the test suite.
+        return new RepositoryLifecycleTestSetup(new TestSuite(DefaultValueTest.class));
+    }
+
+
+	public void tearDown() throws Exception {
+
+		cleanUpRepisotory();
+		super.tearDown();
+		
+	}
+    
+	public void testDefaultValues()
+	{
+	    try
+	    {
+	        ObjectContentManager ocm = getObjectContentManager();
+	        
+	        // --------------------------------------------------------------------------------
+	        // Create and store an object graph in the repository
+	        // --------------------------------------------------------------------------------
+	        Default a = new Default();
+	        a.setPath("/testDefault");
+	        a.setP1("p1Value");
+	        // do not set p2, p3, p4, p5
+	        
+	        ocm.insert(a);
+	        ocm.save();
+	        
+	        
+	        // --------------------------------------------------------------------------------
+	        // Get the object
+	        // --------------------------------------------------------------------------------
+	        a = null;
+	        a = (Default) ocm.getObject( "/testDefault" );
+	        assertNotNull("a is null", a);
+	        
+	        assertEquals("p1Value", a.getP1());
+	        assertNull(a.getP2());
+	        assertEquals("p3DescriptorDefaultValue", a.getP3());
+	        assertEquals("p4DefaultValue", a.getP4());
+	        assertEquals("p5DefaultValue", a.getP5());
+	        
+	    }
+	    catch (Exception e)
+	    {
+	        e.printStackTrace();
+	        fail("Exception occurs during the unit test : " + e);
+	    }
+	    
+	}
+	
+	
+    public void testDefaultValuesRead()
+    {
+        try
+        {
+        	ObjectContentManager ocm = getObjectContentManager();
+
+        	// --------------------------------------------------------------------------------
+            // Manually create a node
+        	// we need this test as SimpleFieldsHelper.storeSimpleField sets the
+        	// property value if the field is not set but a jcrDefaultValue
+        	// is set. But we want to test, that SimpleFieldsHelper.retrieveSimpleField
+        	// sets the default value from the jcrDefaultValue
+            // --------------------------------------------------------------------------------
+        	Node nodeA = ocm.getSession().getRootNode().addNode("testDefault", "ocm:DefTestPrimary");
+        	nodeA.setProperty("ocm:p1", "p1Value");
+        	ocm.getSession().save();
+        	
+             
+            // --------------------------------------------------------------------------------
+            // Get the object
+            // --------------------------------------------------------------------------------
+            Default a = (Default) ocm.getObject( "/testDefault" );
+            assertNotNull("a is null", a);
+            
+            assertEquals("p1Value", a.getP1());
+            assertNull(a.getP2());
+            assertEquals("p3DescriptorDefaultValue", a.getP3());
+            assertEquals("p4DefaultValue", a.getP4());
+            assertEquals("p5DefaultValue", a.getP5());
+
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            fail("Exception occurs during the unit test : " + e);
+        }
+        
+    }
+    
+}
\ No newline at end of file

Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/testmodel/Default.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/testmodel/Default.java?rev=574864&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/testmodel/Default.java (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/testmodel/Default.java Wed Sep 12 02:47:40 2007
@@ -0,0 +1,114 @@
+/*
+ * 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.jackrabbit.ocm.testmodel;
+
+
+/**
+ * Simple object used to test default value assignement
+ */
+public class Default {
+    private String path;
+
+    private String p1;
+
+    private String p2;
+
+    private String p3;
+
+    private String p4;
+
+    private String p5;
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    /**
+     * @return the p1
+     */
+    public String getP1() {
+        return p1;
+    }
+
+    /**
+     * @param p1 the p1 to set
+     */
+    public void setP1(String p1) {
+        this.p1 = p1;
+    }
+
+    /**
+     * @return the p2
+     */
+    public String getP2() {
+        return p2;
+    }
+
+    /**
+     * @param p2 the p2 to set
+     */
+    public void setP2(String p2) {
+        this.p2 = p2;
+    }
+
+    /**
+     * @return the p3
+     */
+    public String getP3() {
+        return p3;
+    }
+
+    /**
+     * @param p3 the p3 to set
+     */
+    public void setP3(String p3) {
+        this.p3 = p3;
+    }
+
+    /**
+     * @return the p4
+     */
+    public String getP4() {
+        return p4;
+    }
+
+    /**
+     * @param p4 the p4 to set
+     */
+    public void setP4(String p4) {
+        this.p4 = p4;
+    }
+
+    /**
+     * @return the p5
+     */
+    public String getP5() {
+        return p5;
+    }
+
+    /**
+     * @param p5 the p5 to set
+     */
+    public void setP5(String p5) {
+        this.p5 = p5;
+    }
+
+}

Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/jcrmapping-default.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/jcrmapping-default.xml?rev=574864&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/jcrmapping-default.xml (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/jcrmapping-default.xml Wed Sep 12 02:47:40 2007
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE jackrabbit-ocm PUBLIC "-//The Apache Software Foundation//DTD Repository//EN" "./src/dtd/jackrabbit-ocm.dtd">
+<jackrabbit-ocm>
+    <class-descriptor
+		className="org.apache.jackrabbit.ocm.testmodel.Default" jcrType="ocm:DefTestPrimary" discriminator="false" >
+		<field-descriptor fieldName="path" path="true" />
+        
+        <!-- no default value, assigned in test -->
+		<field-descriptor fieldName="p1" jcrName="ocm:p1" />
+        
+        <!-- no default value, expected null in test -->
+		<field-descriptor fieldName="p2" jcrName="ocm:p2" />
+        
+        <!-- default value in descriptor -->
+		<field-descriptor fieldName="p3" jcrName="ocm:p3" jcrDefaultValue="p3DescriptorDefaultValue" />
+        
+        <!-- default value from PropertyDefinition in primary type -->
+		<field-descriptor fieldName="p4" jcrName="ocm:p4" />
+        
+        <!-- default value from PropertyDefinition in mixin type -->
+		<field-descriptor fieldName="p5" jcrName="ocm:p5" />
+	</class-descriptor>
+</jackrabbit-ocm>
+ 

Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/nodetypes/custom_nodetypes.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/nodetypes/custom_nodetypes.xml?rev=574864&r1=574863&r2=574864&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/nodetypes/custom_nodetypes.xml (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/test-config/nodetypes/custom_nodetypes.xml Wed Sep 12 02:47:40 2007
@@ -242,5 +242,30 @@
     </childNodeDefinition>    
   </nodeType>
    
+  <!-- START Node Types for testing default simple values -->
+  <!-- Mixin Node Type -->
+  <nodeType name="ocm:DefTestMixin" isMixin="true">
+    <propertyDefinition name="ocm:p5" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
+      <defaultValues>
+        <defaultValue>p5DefaultValue</defaultValue>
+      </defaultValues>
+    </propertyDefinition>    
+  </nodeType>    
+  <!-- Primary Node Type -->
+  <nodeType name="ocm:DefTestPrimary" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
+    <supertypes>
+      <supertype>nt:base</supertype>
+      <supertype>ocm:DefTestMixin</supertype>
+    </supertypes>
+    <propertyDefinition name="ocm:p1" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
+    <propertyDefinition name="ocm:p2" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
+    <propertyDefinition name="ocm:p3" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
+    <propertyDefinition name="ocm:p4" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
+      <defaultValues>
+        <defaultValue>p4DefaultValue</defaultValue>
+      </defaultValues>
+    </propertyDefinition>    
+  </nodeType>
+  <!-- END Node Types for testing default simple values -->
 </nodeTypes>