|
From: <hib...@li...> - 2006-03-28 19:00:06
|
Author: ste...@jb...
Date: 2006-03-28 13:59:59 -0500 (Tue, 28 Mar 2006)
New Revision: 9704
Modified:
trunk/Hibernate3/src/org/hibernate/cfg/HbmBinder.java
Log:
HHH-1175 : hibernate-mapping sub-element ordering insensitivity
Modified: trunk/Hibernate3/src/org/hibernate/cfg/HbmBinder.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/cfg/HbmBinder.java 2006-03-28 18:59:42 UTC (rev 9703)
+++ trunk/Hibernate3/src/org/hibernate/cfg/HbmBinder.java 2006-03-28 18:59:59 UTC (rev 9704)
@@ -122,125 +122,117 @@
}
Element hmNode = doc.getRootElement();
- inheritedMetas = getMetas( hmNode, inheritedMetas, true ); // get meta's from
- // <hibernate-mapping>
+ // get meta's from <hibernate-mapping>
+ inheritedMetas = getMetas( hmNode, inheritedMetas, true );
extractRootAttributes( hmNode, mappings );
- Iterator filterDefs = hmNode.elementIterator( "filter-def" );
- while ( filterDefs.hasNext() ) {
- parseFilterDef( (Element) filterDefs.next(), mappings );
- }
+ Iterator rootChildren = hmNode.elementIterator();
+ while ( rootChildren.hasNext() ) {
+ final Element element = (Element) rootChildren.next();
+ final String elementName = element.getName();
- Iterator typeDefs = hmNode.elementIterator( "typedef" );
- while ( typeDefs.hasNext() ) {
- Element typeDef = (Element) typeDefs.next();
- String typeClass = typeDef.attributeValue( "class" );
- String typeName = typeDef.attributeValue( "name" );
- Iterator paramIter = typeDef.elementIterator( "param" );
- Properties parameters = new Properties();
- while ( paramIter.hasNext() ) {
- Element param = (Element) paramIter.next();
- parameters.setProperty( param.attributeValue( "name" ), param.getTextTrim() );
+ if ( "filter-def".equals( elementName ) ) {
+ parseFilterDef( element, mappings );
}
-
- mappings.addTypeDef( typeName, typeClass, parameters );
+ else if ( "typedef".equals( elementName ) ) {
+ bindTypeDef( element, mappings );
+ }
+ else if ( "class".equals( elementName ) ) {
+ RootClass rootclass = new RootClass();
+ bindRootClass( element, rootclass, mappings, inheritedMetas );
+ mappings.addClass( rootclass );
+ }
+ else if ( "subclass".equals( elementName ) ) {
+ PersistentClass superModel = getSuperclass( mappings, element );
+ handleSubclass( superModel, mappings, element, inheritedMetas );
+ }
+ else if ( "joined-subclass".equals( elementName ) ) {
+ PersistentClass superModel = getSuperclass( mappings, element );
+ handleJoinedSubclass( superModel, mappings, element, inheritedMetas );
+ }
+ else if ( "union-subclass".equals( elementName ) ) {
+ PersistentClass superModel = getSuperclass( mappings, element );
+ handleUnionSubclass( superModel, mappings, element, inheritedMetas );
+ }
+ else if ( "query".equals( elementName ) ) {
+ bindNamedQuery( element, null, mappings );
+ }
+ else if ( "sql-query".equals( elementName ) ) {
+ bindNamedSQLQuery( element, null, mappings );
+ }
+ else if ( "resultset".equals( elementName ) ) {
+ bindResultSetMappingDefinition( element, null, mappings );
+ }
+ else if ( "import".equals( elementName ) ) {
+ bindImport( element, mappings );
+ }
+ else if ( "database-object".equals( elementName ) ) {
+ bindAuxiliaryDatabaseObject( element, mappings );
+ }
+ else {
+ throw new MappingException( "Unrecognized element [hibernate-mapping/" + elementName + "]" );
+ }
}
+ }
- Iterator nodes = hmNode.elementIterator( "class" );
- while ( nodes.hasNext() ) {
- Element n = (Element) nodes.next();
- RootClass rootclass = new RootClass();
- bindRootClass( n, rootclass, mappings, inheritedMetas );
- mappings.addClass( rootclass );
- }
+ private static void bindImport(Element importNode, Mappings mappings) {
+ String className = getClassName( importNode.attribute( "class" ), mappings );
+ Attribute renameNode = importNode.attribute( "rename" );
+ String rename = ( renameNode == null ) ?
+ StringHelper.unqualify( className ) :
+ renameNode.getValue();
+ log.debug( "Import: " + rename + " -> " + className );
+ mappings.addImport( className, rename );
+ }
- Iterator subclassnodes = hmNode.elementIterator( "subclass" );
- while ( subclassnodes.hasNext() ) {
- Element subnode = (Element) subclassnodes.next();
- PersistentClass superModel = getSuperclass( mappings, subnode );
- handleSubclass( superModel, mappings, subnode, inheritedMetas );
+ private static void bindTypeDef(Element typedefNode, Mappings mappings) {
+ String typeClass = typedefNode.attributeValue( "class" );
+ String typeName = typedefNode.attributeValue( "name" );
+ Iterator paramIter = typedefNode.elementIterator( "param" );
+ Properties parameters = new Properties();
+ while ( paramIter.hasNext() ) {
+ Element param = (Element) paramIter.next();
+ parameters.setProperty( param.attributeValue( "name" ), param.getTextTrim() );
}
+ mappings.addTypeDef( typeName, typeClass, parameters );
+ }
- Iterator joinedsubclassnodes = hmNode.elementIterator( "joined-subclass" );
- while ( joinedsubclassnodes.hasNext() ) {
- Element subnode = (Element) joinedsubclassnodes.next();
- PersistentClass superModel = getSuperclass( mappings, subnode );
- handleJoinedSubclass( superModel, mappings, subnode, inheritedMetas );
- }
-
- Iterator unionsubclassnodes = hmNode.elementIterator( "union-subclass" );
- while ( unionsubclassnodes.hasNext() ) {
- Element subnode = (Element) unionsubclassnodes.next();
- PersistentClass superModel = getSuperclass( mappings, subnode );
- handleUnionSubclass( superModel, mappings, subnode, inheritedMetas );
- }
-
- nodes = hmNode.elementIterator( "query" );
- while ( nodes.hasNext() ) {
- bindNamedQuery( (Element) nodes.next(), null, mappings );
- }
-
- nodes = hmNode.elementIterator( "sql-query" );
- while ( nodes.hasNext() ) {
- bindNamedSQLQuery( (Element) nodes.next(), null, mappings );
- }
-
- nodes = hmNode.elementIterator( "resultset" );
- while ( nodes.hasNext() ) {
- bindResultSetMappingDefinition( (Element) nodes.next(), null, mappings );
- }
-
- nodes = hmNode.elementIterator( "import" );
- while ( nodes.hasNext() ) {
- Element n = (Element) nodes.next();
- String className = getClassName( n.attribute( "class" ), mappings );
- Attribute renameNode = n.attribute( "rename" );
- String rename = ( renameNode == null ) ?
- StringHelper.unqualify( className ) :
- renameNode.getValue();
- log.debug( "Import: " + rename + " -> " + className );
- mappings.addImport( className, rename );
- }
-
- nodes = hmNode.elementIterator( "database-object");
- while ( nodes.hasNext() ) {
- Element auxDbObjectNode = ( Element ) nodes.next();
- AuxiliaryDatabaseObject auxDbObject = null;
- Element definitionNode = auxDbObjectNode.element( "definition" );
- if ( definitionNode != null ) {
- try {
- auxDbObject = ( AuxiliaryDatabaseObject ) ReflectHelper
- .classForName( definitionNode.attributeValue( "class" ) )
- .newInstance();
- }
- catch( ClassNotFoundException e ) {
- throw new MappingException(
- "could not locate custom database object class [" +
- definitionNode.attributeValue( "class" ) + "]"
- );
- }
- catch( Throwable t ) {
- throw new MappingException(
- "could not instantiate custom database object class [" +
- definitionNode.attributeValue( "class" ) + "]"
- );
- }
+ private static void bindAuxiliaryDatabaseObject(Element auxDbObjectNode, Mappings mappings) {
+ AuxiliaryDatabaseObject auxDbObject = null;
+ Element definitionNode = auxDbObjectNode.element( "definition" );
+ if ( definitionNode != null ) {
+ try {
+ auxDbObject = ( AuxiliaryDatabaseObject ) ReflectHelper
+ .classForName( definitionNode.attributeValue( "class" ) )
+ .newInstance();
}
- else {
- auxDbObject = new SimpleAuxiliaryDatabaseObject(
- auxDbObjectNode.elementTextTrim( "create" ),
- auxDbObjectNode.elementTextTrim( "drop" )
+ catch( ClassNotFoundException e ) {
+ throw new MappingException(
+ "could not locate custom database object class [" +
+ definitionNode.attributeValue( "class" ) + "]"
);
}
-
- Iterator dialectScopings = auxDbObjectNode.elementIterator( "dialect-scope" );
- while ( dialectScopings.hasNext() ) {
- Element dialectScoping = ( Element ) dialectScopings.next();
- auxDbObject.addDialectScope( dialectScoping.attributeValue( "name" ) );
+ catch( Throwable t ) {
+ throw new MappingException(
+ "could not instantiate custom database object class [" +
+ definitionNode.attributeValue( "class" ) + "]"
+ );
}
+ }
+ else {
+ auxDbObject = new SimpleAuxiliaryDatabaseObject(
+ auxDbObjectNode.elementTextTrim( "create" ),
+ auxDbObjectNode.elementTextTrim( "drop" )
+ );
+ }
- mappings.addAuxiliaryDatabaseObject( auxDbObject );
+ Iterator dialectScopings = auxDbObjectNode.elementIterator( "dialect-scope" );
+ while ( dialectScopings.hasNext() ) {
+ Element dialectScoping = ( Element ) dialectScopings.next();
+ auxDbObject.addDialectScope( dialectScoping.attributeValue( "name" ) );
}
+
+ mappings.addAuxiliaryDatabaseObject( auxDbObject );
}
private static void extractRootAttributes(Element hmNode, Mappings mappings) {
@@ -260,7 +252,7 @@
mappings.setDefaultLazy( dlNode == null || dlNode.getValue().equals( "true" ) );
Attribute aiNode = hmNode.attribute( "auto-import" );
- mappings.setAutoImport( ( aiNode == null ) ? true : "true".equals( aiNode.getValue() ) );
+ mappings.setAutoImport( ( aiNode == null ) || "true".equals( aiNode.getValue() ) );
Attribute packNode = hmNode.attribute( "package" );
if ( packNode != null ) mappings.setDefaultPackage( packNode.getValue() );
@@ -301,7 +293,7 @@
catalog,
getClassTableName( entity, node, schema, catalog, null, mappings ),
getSubselect( node ),
- entity.isAbstract() == null ? false : entity.isAbstract().booleanValue()
+ entity.isAbstract() != null && entity.isAbstract().booleanValue()
);
entity.setTable( table );
bindComment(table, node);
@@ -607,13 +599,15 @@
// DYNAMIC UPDATE
Attribute dynamicNode = node.attribute( "dynamic-update" );
- entity.setDynamicUpdate( ( dynamicNode == null ) ? false : "true".equals( dynamicNode
- .getValue() ) );
+ entity.setDynamicUpdate(
+ dynamicNode != null && "true".equals( dynamicNode.getValue() )
+ );
// DYNAMIC INSERT
Attribute insertNode = node.attribute( "dynamic-insert" );
- entity.setDynamicInsert( ( insertNode == null ) ? false : "true".equals( insertNode
- .getValue() ) );
+ entity.setDynamicInsert(
+ insertNode != null && "true".equals( insertNode.getValue() )
+ );
// IMPORT
mappings.addImport( entity.getEntityName(), entity.getEntityName() );
@@ -795,7 +789,7 @@
schema,
catalog,
getClassTableName(unionSubclass, node, schema, catalog, denormalizedSuperTable, mappings ),
- unionSubclass.isAbstract() == null ? false : unionSubclass.isAbstract().booleanValue(),
+ unionSubclass.isAbstract() != null && unionSubclass.isAbstract().booleanValue(),
getSubselect( node ),
denormalizedSuperTable
);
|