[hibernate-commits] Hibernate SVN: r10908 - in branches/Branch_3_2/HibernateExt: ejb/src/test/org/hibernate/ejb/test/xml metadata/src/java/org/hibernate/reflection/java

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Dec 1 13:11:29 EST 2006


Author: epbernard
Date: 2006-12-01 13:11:26 -0500 (Fri, 01 Dec 2006)
New Revision: 10908

Added:
   branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Address.java
   branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Employee.java
   branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java
   branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm3.xml
Modified:
   branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java
   branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java
Log:
EJB-240 handle attribute override in properties

Added: branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Address.java	2006-12-01 14:16:43 UTC (rev 10907)
+++ branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Address.java	2006-12-01 18:11:26 UTC (rev 10908)
@@ -0,0 +1,54 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Address {
+	private String street;
+	private String city;
+	private String state;
+	private String zip;
+
+	public Address() {
+	}
+
+	public Address(String street, String city, String state, String zip) {
+		this.street = street;
+		this.city = city;
+		this.state = state;
+		this.zip = zip;
+	}
+
+	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;
+	}
+
+	public String getZip() {
+		return zip;
+	}
+
+	public void setZip(String zip) {
+		this.zip = zip;
+	}
+}
\ No newline at end of file

Added: branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Employee.java
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Employee.java	2006-12-01 14:16:43 UTC (rev 10907)
+++ branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/Employee.java	2006-12-01 18:11:26 UTC (rev 10908)
@@ -0,0 +1,66 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Employee {
+    @Id
+	Long id;
+    String name;
+/*
+    @Embedded
+    @AttributeOverrides({
+        @AttributeOverride(name = "street", column = @Column(name = "HA_street")),
+        @AttributeOverride(name = "city", column = @Column(name = "HA_city")),
+        @AttributeOverride(name = "state", column = @Column(name = "HA_state")),
+        @AttributeOverride(name = "zip", column = @Column(name = "HA_zip")) })
+*/
+    Address homeAddress;
+
+/*
+    @Embedded
+    @AttributeOverrides({
+        @AttributeOverride(name = "street", column = @Column(name = "MA_street")),
+        @AttributeOverride(name = "city", column = @Column(name = "MA_city")),
+        @AttributeOverride(name = "state", column = @Column(name = "MA_state")),
+        @AttributeOverride(name = "zip", column = @Column(name = "MA_zip")) })
+*/
+    Address mailAddress;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Address getHomeAddress() {
+        return homeAddress;
+    }
+
+    public void setHomeAddress(Address homeAddress) {
+        this.homeAddress = homeAddress;
+    }
+
+    public Address getMailAddress() {
+        return mailAddress;
+    }
+
+    public void setMailAddress(Address mailAddress) {
+        this.mailAddress = mailAddress;
+    }
+}
\ No newline at end of file

Added: branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java	2006-12-01 14:16:43 UTC (rev 10907)
+++ branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java	2006-12-01 18:11:26 UTC (rev 10908)
@@ -0,0 +1,41 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class XmlAttributeOverrideTest extends TestCase {
+
+	public void testAttributeOverriding() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+
+        Employee e = new Employee();
+        e.setId(Long.valueOf(100));
+        e.setName("Bubba");
+        e.setHomeAddress(new Address("123 Main St", "New York", "NY", "11111"));
+        e.setMailAddress(new Address("P.O. Box 123", "New York", "NY", "11111"));
+
+        em.persist(e);
+
+		em.flush();
+
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[0];
+	}
+
+	@Override
+	public String[] getEjb3DD() {
+		return new String[] {
+				"org/hibernate/ejb/test/xml/orm3.xml"
+		};
+	}
+}

Modified: branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java	2006-12-01 14:16:43 UTC (rev 10907)
+++ branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/XmlTest.java	2006-12-01 18:11:26 UTC (rev 10908)
@@ -22,7 +22,7 @@
 	public String[] getEjb3DD() {
 		return new String[] {
 				"org/hibernate/ejb/test/xml/orm.xml",
-				"org/hibernate/ejb/test/xml/orm2.xml"
+				"org/hibernate/ejb/test/xml/orm2.xml",
 		};
 	}
 }

Added: branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm3.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm3.xml	2006-12-01 14:16:43 UTC (rev 10907)
+++ branches/Branch_3_2/HibernateExt/ejb/src/test/org/hibernate/ejb/test/xml/orm3.xml	2006-12-01 18:11:26 UTC (rev 10908)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
+    version="1.0">
+
+    <entity class="org.hibernate.ejb.test.xml.Employee" metadata-complete="false" access="FIELD">
+        <attributes>
+            <id name="id"/>
+            <basic name="name"/>
+
+            <embedded name="homeAddress">
+                <attribute-override name="street">
+                    <column name="home_street"/>
+                </attribute-override>
+                <attribute-override name="city">
+                    <column name="home_city"/>
+                </attribute-override>
+                <attribute-override name="state">
+                    <column name="home_state"/>
+                </attribute-override>
+                <attribute-override name="zip">
+                    <column name="home_zip"/>
+                </attribute-override>
+            </embedded>
+
+            <embedded name="mailAddress">
+                <attribute-override name="street">
+                    <column name="mail_street"/>
+                </attribute-override>
+                <attribute-override name="city">
+                    <column name="mail_city"/>
+                </attribute-override>
+                <attribute-override name="state">
+                    <column name="mail_state"/>
+                </attribute-override>
+                <attribute-override name="zip">
+                    <column name="mail_zip"/>
+                </attribute-override>
+            </embedded>
+
+        </attributes>
+    </entity>
+
+    <embeddable class="org.hibernate.ejb.test.xml.Address">
+        <attributes>
+            <basic name="street"/>
+            <basic name="city"/>
+            <basic name="state"/>
+            <basic name="zip"/>
+        </attributes>
+    </embeddable>
+
+</entity-mappings>
\ No newline at end of file

Modified: branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java
===================================================================
--- branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java	2006-12-01 14:16:43 UTC (rev 10907)
+++ branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java	2006-12-01 18:11:26 UTC (rev 10908)
@@ -11,7 +11,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import javax.persistence.AssociationOverride;
 import javax.persistence.AssociationOverrides;
 import javax.persistence.AttributeOverride;
@@ -358,6 +357,8 @@
 					if ( current != null ) annotationList.add( current );
 					current = getTableGenerator( elementsForProperty, defaults );
 					if ( current != null ) annotationList.add( current );
+					current = getAttributeOverrides( elementsForProperty, defaults );
+					if ( current != null ) annotationList.add( current );
 
 				}
 				processEventAnnotations(annotationList, defaults);
@@ -1159,7 +1160,20 @@
 	}
 
 	private AttributeOverrides getAttributeOverrides(Element tree, XMLContext.Default defaults) {
-		List<AttributeOverride> attributes = (List<AttributeOverride>) buildAttributeOverrides( tree );
+		List<AttributeOverride> attributes = buildAttributeOverrides( tree );
+		return mergeAttributeOverrides( defaults, attributes );
+	}
+
+	private AttributeOverrides getAttributeOverrides(List<Element> elements, XMLContext.Default defaults) {
+		List<AttributeOverride> attributes = new ArrayList<AttributeOverride>();
+		for (Element element : elements) {
+			attributes.addAll( buildAttributeOverrides( element ) );
+		}
+		return mergeAttributeOverrides( defaults, attributes );
+	}
+
+	private AttributeOverrides mergeAttributeOverrides(XMLContext.Default defaults,
+													   List<AttributeOverride> attributes) {
 		if ( defaults.canUseJavaAnnotations() ) {
 			AttributeOverride annotation = super.getAnnotation( AttributeOverride.class );
 			addAttributeOverrideIfNeeded( annotation, attributes );
@@ -1182,9 +1196,14 @@
 
 	private List<AttributeOverride> buildAttributeOverrides(Element element) {
 		List<Element> subelements = element == null ? null : element.elements( "attribute-override" );
+		return buildAttributeOverrides( subelements );
+	}
+
+	private List<AttributeOverride> buildAttributeOverrides(List<Element> subelements) {
 		List<AttributeOverride> overrides = new ArrayList<AttributeOverride>();
 		if ( subelements != null && subelements.size() > 0 ) {
 			for ( Element current : subelements ) {
+				if ( ! current.getName().equals( "attribute-override" ) ) continue;
 				AnnotationDescriptor override = new AnnotationDescriptor( AttributeOverride.class );
 				copyStringAttribute( override, current, "name", true );
 				Element column = current != null ? current.element( "column" ) : null;




More information about the hibernate-commits mailing list