Author: faywang
Date: Tue Feb 24 00:39:48 2009
New Revision: 747239

URL: http://svn.apache.org/viewvc?rev=747239&view=rev
Log:
OPENJPA-930: orm xml support for AttributeOverride

Added:
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/AddressXml.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/CustomerXml.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverridesXml.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/ZipcodeXml.java
Modified:
    
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/embed/embed-orm.xml

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java?rev=747239&r1=747238&r2=747239&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java
 Tue Feb 24 00:39:48 2009
@@ -1259,7 +1259,7 @@
         }
     }
     
-    private FieldMapping getEmbeddedFieldMapping(FieldMapping fm, String 
attrName) {
+    public static FieldMapping getEmbeddedFieldMapping(FieldMapping fm, String 
attrName) {
         ClassMapping embed = null;
         boolean isKey = false;
         boolean isValue = false;
@@ -1300,7 +1300,7 @@
         return getAttributeOverrideField(attrName, fm, embed);
     }
     
-    private ClassMapping getEmbeddedMapping(ValueMapping val) {
+    public static ClassMapping getEmbeddedMapping(ValueMapping val) {
         ClassMapping embed = val.getEmbeddedMapping();
         if (embed != null) 
             return embed;
@@ -1310,7 +1310,7 @@
 
     }
     
-    public FieldMapping getAttributeOverrideField(String attrName, 
FieldMapping fm, ClassMapping embed) {
+    public static FieldMapping getAttributeOverrideField(String attrName, 
FieldMapping fm, ClassMapping embed) {
         FieldMapping efm;
         int idxOfDot = attrName.indexOf("."); 
         if (idxOfDot == -1) {

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java?rev=747239&r1=747238&r2=747239&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java
 Tue Feb 24 00:39:48 2009
@@ -42,6 +42,7 @@
 import org.apache.openjpa.jdbc.meta.MappingRepository;
 import org.apache.openjpa.jdbc.meta.QueryResultMapping;
 import org.apache.openjpa.jdbc.meta.SequenceMapping;
+import org.apache.openjpa.jdbc.meta.ValueMapping;
 import org.apache.openjpa.jdbc.meta.strats.EnumValueHandler;
 import org.apache.openjpa.jdbc.meta.strats.FlatClassStrategy;
 import org.apache.openjpa.jdbc.meta.strats.FullClassStrategy;
@@ -661,19 +662,10 @@
     /**
      * Return the proper override.
      */
-    private FieldMapping getAttributeOverride(FieldMapping fm)
-        throws SAXException {
-        ClassMapping embed = fm.getEmbeddedMapping();
-        if (embed == null) {
-            embed = fm.getElementMapping().getEmbeddedMapping();
-            if (embed == null)
-                throw getException(_loc.get("not-embedded", fm));
-        }
-        FieldMapping efm = embed.getFieldMapping(_override);
-        if (efm == null)
-            throw getException(_loc.get("embed-override-name",
-                fm, _override));
-        return efm;
+    private FieldMapping getAttributeOverride(FieldMapping fm) 
+    throws SAXException {
+        return AnnotationPersistenceMappingParser.getEmbeddedFieldMapping(fm, 
+            _override);
     }
 
     /**

Added: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/AddressXml.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/AddressXml.java?rev=747239&view=auto
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/AddressXml.java
 (added)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/AddressXml.java
 Tue Feb 24 00:39:48 2009
@@ -0,0 +1,50 @@
+/*
+ * 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.openjpa.persistence.embed.attrOverrides;
+
+public class AddressXml {
+    protected String street;
+    protected String city;
+    protected String state;
+    protected ZipcodeXml zipcode;
+    
+    public String getStreet() {
+        return street;
+    }
+    
+    public void setStreet(String street) {
+        this.street = street;
+    }
+    
+    public String getCity() {
+        return city;
+    }
+    
+    public void setCity(String city) {
+        this.city = city;
+    }
+    
+    public String getState() {
+        return state;
+    }
+    
+    public void setState(String state) {
+        this.state = state;
+    }
+}

Added: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/CustomerXml.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/CustomerXml.java?rev=747239&view=auto
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/CustomerXml.java
 (added)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/CustomerXml.java
 Tue Feb 24 00:39:48 2009
@@ -0,0 +1,52 @@
+/*
+ * 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.openjpa.persistence.embed.attrOverrides;
+
+public class CustomerXml {
+    protected Integer id;
+    
+    protected String name;
+    
+    protected AddressXml address;
+    
+    public Integer getId() {
+       return id;
+    }
+    
+    public void setId(Integer id) {
+       this.id = id;
+    }
+    
+    public String getName() {
+       return name;
+    }
+    
+    public void setName(String name) {
+       this.name = name;
+    }
+    
+    public AddressXml getAddress() {
+       return address;
+    }
+    
+    public void setAddress(AddressXml address) {
+       this.address = address;
+    }
+}
+

Added: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverridesXml.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverridesXml.java?rev=747239&view=auto
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverridesXml.java
 (added)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/TestAttrOverridesXml.java
 Tue Feb 24 00:39:48 2009
@@ -0,0 +1,98 @@
+/*
+ * 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.openjpa.persistence.embed.attrOverrides;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Query;
+
+import junit.framework.Assert;
+
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+public class TestAttrOverridesXml extends SingleEMFTestCase {
+   
+    public int numPersons = 4;
+    public List<String> namedQueries = new ArrayList<String>();
+    public int eId = 1;
+    
+    public void setUp() {
+        setUp(CLEAR_TABLES);
+    }
+    
+    @Override
+    protected String getPersistenceUnitName() {
+        return "embed-pu";
+    }
+    
+    public void testAttrOverride1() {
+       createObj1();
+       findObj1();
+       queryObj1();
+    }
+    
+    public void createObj1() {
+        EntityManager em = emf.createEntityManager();
+        EntityTransaction tran = em.getTransaction();
+        for (int i = 0; i < numPersons; i++)
+               createCustomer1(em, eId++);
+        tran.begin();
+        em.flush();
+        tran.commit();
+        em.close();
+    }
+
+    public CustomerXml createCustomer1(EntityManager em, int id) {
+       CustomerXml p = new CustomerXml();
+       p.setId(id);
+       AddressXml addr = new AddressXml();
+       addr.setCity("city_" + id);
+       addr.setState("state_" + id);
+       addr.setStreet("street_" + id);
+       p.setAddress(addr);
+       p.setName("name_" + id);
+        em.persist(p);
+        return p;
+    }
+
+    public void findObj1() {
+        EntityManager em = emf.createEntityManager();
+        CustomerXml p = em.find(CustomerXml.class, 1);
+        Assert.assertEquals(p.getId(), new Integer(1));
+        Assert.assertEquals(p.getAddress().getCity(), "city_1");
+        Assert.assertEquals(p.getAddress().getStreet(), "street_1");
+        Assert.assertEquals(p.getAddress().getState(), "state_1");
+        Assert.assertEquals(p.getName(), "name_1");
+    }
+
+    public void queryObj1() {
+        EntityManager em = emf.createEntityManager();
+        EntityTransaction tran = em.getTransaction();
+        tran.begin();
+        String jpql = "select p from CustomerXml1 p";
+        Query q = em.createQuery(jpql);
+        List<CustomerXml> ps = q.getResultList();
+        Assert.assertEquals(ps.size(), numPersons);
+        tran.commit();
+        em.close();
+    }
+}

Added: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/ZipcodeXml.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/ZipcodeXml.java?rev=747239&view=auto
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/ZipcodeXml.java
 (added)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/attrOverrides/ZipcodeXml.java
 Tue Feb 24 00:39:48 2009
@@ -0,0 +1,40 @@
+/*
+ * 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.openjpa.persistence.embed.attrOverrides;
+
+public class ZipcodeXml {
+       protected String zip;
+       protected String plusFour;
+       
+       public String getZip() {
+               return zip;
+       }
+       
+       public void setZip(String zip) {
+               this.zip = zip;
+       }
+       
+       public String getPlusFour() {
+               return plusFour;
+       }
+       
+       public void setPlusFour(String plusFour) {
+               this.plusFour = plusFour;
+       }
+}

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/embed/embed-orm.xml
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/embed/embed-orm.xml?rev=747239&r1=747238&r2=747239&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/embed/embed-orm.xml
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/embed/embed-orm.xml
 Tue Feb 24 00:39:48 2009
@@ -149,6 +149,44 @@
                </attributes>
        </entity>
 
+    <entity name="CustomerXml1" 
+        class="org.apache.openjpa.persistence.embed.attrOverrides.CustomerXml" 
+        access="FIELD">
+        <attributes>
+            <id name="id"><column length="12"/></id>
+            <basic name="name"><column length="12"/></basic>
+            <embedded name="address">
+                <attribute-override name="state">
+                    <column name="ADDR_STATE" />
+                </attribute-override>
+                <attribute-override name="zipcode.zip">
+                    <column name="ADDR_ZIP" />
+                </attribute-override>
+            </embedded>
+        </attributes>
+    </entity>
+
+    <embeddable 
+        class="org.apache.openjpa.persistence.embed.attrOverrides.AddressXml" 
+        access="FIELD">
+        <attributes>
+            <basic name="street"><column length="12"/>
+            </basic>
+            <basic name="city"><column length="12"/></basic>
+            <basic name="state"><column length="12"/></basic>
+            <embedded name="zipcode"/>
+        </attributes>
+    </embeddable>
+
+    <embeddable 
+        class="org.apache.openjpa.persistence.embed.attrOverrides.ZipcodeXml" 
+        access="FIELD">
+        <attributes>
+            <basic name="zip"><column length="12"/></basic>
+            <basic name="plusFour"><column length="12"/></basic>
+        </attributes>
+    </embeddable>
+
        <embeddable
                class="org.apache.openjpa.persistence.embed.Embed_EmbedXml"
                access="FIELD">


Reply via email to