From: <hib...@li...> - 2006-04-16 16:58:43
|
Author: epbernard Date: 2006-04-16 12:57:40 -0400 (Sun, 16 Apr 2006) New Revision: 9754 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/SocialSecurityMoralAccount.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml Log: add table generator support for xml overriding Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-16 16:14:07 UTC (rev 9753) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-16 16:57:40 UTC (rev 9754) @@ -26,6 +26,7 @@ import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.SequenceGenerator; +import javax.persistence.TableGenerator; import org.dom4j.Attribute; import org.dom4j.Element; @@ -71,6 +72,7 @@ annotationToXml.put( DiscriminatorValue.class, "discriminator-value" ); annotationToXml.put( DiscriminatorColumn.class, "discriminator-column" ); annotationToXml.put( SequenceGenerator.class, "sequence-generator" ); + annotationToXml.put( TableGenerator.class, "table-generator" ); } private XMLContext xmlContext; @@ -171,6 +173,8 @@ if ( current != null ) annotationList.add( current ); current = getSequenceGenerator( tree, defaults ); if ( current != null ) annotationList.add( current ); + current = getTableGenerator( tree, defaults ); + if ( current != null ) annotationList.add( current ); this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] ); } else if ( propertyName != null ) { @@ -183,6 +187,64 @@ } } + private TableGenerator getTableGenerator(Element tree, XMLContext.Default defaults) { + Element element = tree != null ? tree.element( annotationToXml.get(TableGenerator.class) ) : null; + if ( element != null ) { + AnnotationDescriptor ad = new AnnotationDescriptor( TableGenerator.class ); + copyStringAttribute( ad, element, "name" ); + copyStringAttribute( ad, element, "table" ); + copyStringAttribute( ad, element, "catalog" ); + copyStringAttribute( ad, element, "schema" ); + copyStringAttribute( ad, element, "pk-column-name" ); + copyStringAttribute( ad, element, "value-column-name" ); + copyStringAttribute( ad, element, "pk-column-value" ); + copyIntegerAttribute( ad, element, "initial-value" ); + copyIntegerAttribute( ad, element, "allocation-size" ); + buildUniqueConstraints( ad, element ); + if ( StringHelper.isEmpty( (String) ad.valueOf( "schema" ) ) + && StringHelper.isNotEmpty( defaults.getSchema() ) ) { + ad.setValue( "schema", defaults.getSchema() ); + } + if ( StringHelper.isEmpty( (String) ad.valueOf( "catalog" ) ) + && StringHelper.isNotEmpty( defaults.getCatalog() ) ) { + ad.setValue( "catalog", defaults.getCatalog() ); + } + return AnnotationFactory.create( ad ); + } + else if ( defaults.canUseJavaAnnotations() && super.isAnnotationPresent( TableGenerator.class ) ) { + TableGenerator tableAnn = super.getAnnotation( TableGenerator.class ); + if ( StringHelper.isNotEmpty( defaults.getSchema() ) + || StringHelper.isNotEmpty( defaults.getCatalog() ) ) { + AnnotationDescriptor annotation = new AnnotationDescriptor( TableGenerator.class ); + annotation.setValue( "name", tableAnn.name() ); + annotation.setValue( "table", tableAnn.table() ); + annotation.setValue( "catalog", tableAnn.table() ); + if ( StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) ) + && StringHelper.isNotEmpty( defaults.getCatalog() ) ) { + annotation.setValue( "catalog", defaults.getCatalog() ); + } + annotation.setValue( "schema", tableAnn.table() ); + if ( StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) ) + && StringHelper.isNotEmpty( defaults.getSchema() ) ) { + annotation.setValue( "catalog", defaults.getSchema() ); + } + annotation.setValue( "pkColumnName", tableAnn.pkColumnName() ); + annotation.setValue( "valueColumnName", tableAnn.valueColumnName() ); + annotation.setValue( "pkColumnValue", tableAnn.pkColumnValue() ); + annotation.setValue( "initialValue", tableAnn.initialValue() ); + annotation.setValue( "allocationSize", tableAnn.allocationSize() ); + annotation.setValue( "uniqueConstraints", tableAnn.uniqueConstraints() ); + return AnnotationFactory.create( annotation ); + } + else { + return tableAnn; + } + } + else { + return null; + } + } + private SequenceGenerator getSequenceGenerator(Element tree, XMLContext.Default defaults) { Element element = tree != null ? tree.element( annotationToXml.get(SequenceGenerator.class) ) : null; if ( element != null ) { Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-16 16:14:07 UTC (rev 9753) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/EJB3OverridenAnnotationReaderTest.java 2006-04-16 16:57:40 UTC (rev 9754) @@ -20,6 +20,7 @@ import javax.persistence.DiscriminatorValue; import javax.persistence.DiscriminatorColumn; import javax.persistence.SequenceGenerator; +import javax.persistence.TableGenerator; import junit.framework.TestCase; import org.hibernate.util.XMLHelper; @@ -59,6 +60,10 @@ assertNotNull( "Sequence Overriding not working", reader.getAnnotation( SequenceGenerator.class ) ); assertEquals( "wrong sequence name", "seqhilo", reader.getAnnotation( SequenceGenerator.class ).sequenceName() ); assertEquals( "default fails", 50, reader.getAnnotation( SequenceGenerator.class ).allocationSize() ); + assertNotNull( "TableOverriding not working", reader.getAnnotation( TableGenerator.class ) ); + assertEquals( "wrong tble name", "tablehilo", reader.getAnnotation( TableGenerator.class ).table() ); + assertEquals( "no schema overriding", "myschema", reader.getAnnotation( TableGenerator.class ).schema() ); + reader = new EJB3OverridenAnnotationReader(Match.class, context); assertNotNull( reader.getAnnotation( Table.class) ); assertEquals( "Java annotation not taken into account", "matchtable", reader.getAnnotation( Table.class ).name() ); @@ -111,6 +116,7 @@ assertNull( reader.getAnnotation( DiscriminatorValue.class ) ); assertNull( reader.getAnnotation( DiscriminatorColumn.class ) ); assertNull( reader.getAnnotation( SequenceGenerator.class ) ); + assertNull( reader.getAnnotation( TableGenerator.class ) ); } private XMLContext buildContext(String ormfile) throws SAXException, DocumentException, IOException { Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/SocialSecurityMoralAccount.java =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/SocialSecurityMoralAccount.java 2006-04-16 16:14:07 UTC (rev 9753) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/SocialSecurityMoralAccount.java 2006-04-16 16:57:40 UTC (rev 9754) @@ -5,6 +5,7 @@ import javax.persistence.IdClass; import javax.persistence.DiscriminatorValue; import javax.persistence.SequenceGenerator; +import javax.persistence.TableGenerator; /** * @author Emmanuel Bernard @@ -13,6 +14,7 @@ @IdClass(SocialSecurityNumber.class) @DiscriminatorValue("Moral") @SequenceGenerator(name="seq") +@TableGenerator(name="table") public class SocialSecurityMoralAccount { public String number; public String countryCode; Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml =================================================================== --- trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml 2006-04-16 16:14:07 UTC (rev 9753) +++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/xml/orm.xml 2006-04-16 16:57:40 UTC (rev 9754) @@ -27,6 +27,7 @@ </unique-constraint> </secondary-table> <sequence-generator name="seqhilo" sequence-name="seqhilo"/> + <table-generator name="table" table="tablehilo"/> </entity> <entity class="Match"> <inheritance strategy="JOINED"/> |