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 ); |