Author: mikedd
Date: Mon Apr  2 14:14:48 2007
New Revision: 524921

URL: http://svn.apache.org/viewvc?view=rev&rev=524921
Log:
OpenJPA-185 allow optional to be overriden by xml descriptor.

Added:
    
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java
   (with props)
    
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java
   (with props)
Modified:
    
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml
    
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java

Added: 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java?view=auto&rev=524921
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java
 (added)
+++ 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java
 Mon Apr  2 14:14:48 2007
@@ -0,0 +1,49 @@
+package org.apache.openjpa.persistence.xml;
+
+import javax.persistence.EntityManager;
+
+import org.apache.openjpa.persistence.InvalidStateException;
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+public class TestXmlOverrideEntity extends SingleEMFTestCase {
+
+    public void setUp() {
+        setUp(XmlOverrideEntity.class);
+    }
+
+    /**
+     * Tests that the optional attribute on a basic field can be overrided by
+     * an xml descriptor. 
+     * 
+     * XmlOverrideEntity.name is annotated with optional=false
+     * XmlOverrideEntity.description is annotated with optional=true. 
+     * 
+     * The optional attributes are reversed in orm.xml. 
+     */
+    public void testOptionalAttributeOverride() {
+        EntityManager em = emf.createEntityManager();
+
+        XmlOverrideEntity optional = new XmlOverrideEntity();
+
+        optional.setName(null);
+        optional.setDescription("description");
+
+        em.getTransaction().begin();
+        em.persist(optional);
+        em.getTransaction().commit();
+
+        try {
+            em.getTransaction().begin();
+            optional.setDescription(null);
+            em.getTransaction().commit();
+            fail("XmlOrverrideEntity.description should not be optional. "
+                    + "Expecting an InvalidStateException.");
+        } catch (InvalidStateException e) {
+        }
+
+        em.getTransaction().begin();
+        em.remove(em.find(XmlOverrideEntity.class, optional.getId()));
+        em.getTransaction().commit();
+    }
+}
+

Propchange: 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestXmlOverrideEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java?view=auto&rev=524921
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java
 (added)
+++ 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java
 Mon Apr  2 14:14:48 2007
@@ -0,0 +1,45 @@
+package org.apache.openjpa.persistence.xml;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
[EMAIL PROTECTED]
+public class XmlOverrideEntity {
+
+    @Id
+    @GeneratedValue
+    int id;
+    
+    @Basic(optional=false)
+    String name;
+    
+    @Basic(optional=true)
+    String description;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    } 
+}
+

Propchange: 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml?view=diff&rev=524921&r1=524920&r2=524921
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml
 (original)
+++ 
incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/orm.xml
 Mon Apr  2 14:14:48 2007
@@ -20,4 +20,11 @@
             <version name="version"/>
         </attributes>
     </entity>
-</entity-mappings>
\ No newline at end of file
+    <entity name="XmlOverride" class="XmlOverrideEntity">
+       <attributes>
+           <basic name="name" optional="true"></basic>
+           <basic name="description" optional="false"></basic>
+       </attributes>
+    </entity>
+</entity-mappings>
+

Modified: 
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?view=diff&rev=524921&r1=524920&r2=524921
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
 (original)
+++ 
incubator/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
 Mon Apr  2 14:14:48 2007
@@ -1196,6 +1196,12 @@
         val = attrs.getValue("optional");
         if ("false".equals(val))
             fmd.setNullValue(FieldMetaData.NULL_EXCEPTION);
+        else if ("true".equals(val)
+                && fmd.getNullValue() == FieldMetaData.NULL_EXCEPTION) {
+            // Reset value if the field was annotated with optional=false. 
+            // Otherwise leave it alone.
+            fmd.setNullValue(FieldMetaData.NULL_UNSET);
+        }
         if (isMappingOverrideMode()) {
             val = attrs.getValue("mapped-by");
             if (val != null)


Reply via email to