Author: epbernard Date: 2006-04-26 02:20:18 -0400 (Wed, 26 Apr 2006) New Revision: 9793 Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java Removed: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/mixed/ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/MixedTest.java Modified: trunk/HibernateExt/metadata/build.xml trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXAnnotatedElement.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java trunk/HibernateExt/metadata/src/java/org/hibernate/validator/ClassValidator.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/TestCase.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/Government.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaReflectionManagerTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXClassTest.java trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXPropertyTest.java Log: ANN-322 Modified: trunk/HibernateExt/metadata/build.xml =================================================================== --- trunk/HibernateExt/metadata/build.xml 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/build.xml 2006-04-26 06:20:18 UTC (rev 9793) @@ -43,6 +43,7 @@ <copy todir="${classes.dir}"> <fileset dir="${src.dir}"> <include name="**/resources/*.properties"/> + <include name="**/*.xsd"/> </fileset> </copy> </target> Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -3,17 +3,16 @@ import java.util.HashMap; import java.util.Map; +import javax.persistence.AssociationOverride; +import javax.persistence.AssociationOverrides; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.Entity; +import javax.persistence.JoinColumn; import javax.persistence.MappedSuperclass; -import javax.persistence.JoinColumn; -import javax.persistence.AssociationOverride; -import javax.persistence.AssociationOverrides; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; import org.hibernate.reflection.XProperty; @@ -29,10 +28,12 @@ private Map<String, JoinColumn[]> holderJoinColumnOverride; private Map<String, JoinColumn[]> currentPropertyJoinColumnOverride; private String path; + private ExtendedMappings mappings; - public AbstractPropertyHolder(String path, PropertyHolder parent, XClass clazzToProcess) { + public AbstractPropertyHolder(String path, PropertyHolder parent, XClass clazzToProcess, ExtendedMappings mappings) { this.path = path; this.parent = parent; + this.mappings = mappings; buildHierarchyColumnOverride( clazzToProcess ); } @@ -104,7 +105,7 @@ XClass current = element; Map<String, Column[]> columnOverride = new HashMap<String, Column[]>(); Map<String, JoinColumn[]> joinColumnOverride = new HashMap<String, JoinColumn[]>(); - while ( current != null && ! ReflectionManager.INSTANCE.toXClass( Object.class ).equals( current ) ) { + while ( current != null && ! mappings.getReflectionManager().toXClass( Object.class ).equals( current ) ) { if ( current.isAnnotationPresent( Entity.class) || current.isAnnotationPresent( MappedSuperclass.class) || current.isAnnotationPresent( Embeddable.class) ) { //FIXME is embeddable override? Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -111,11 +111,11 @@ import org.hibernate.persister.entity.JoinedSubclassEntityPersister; import org.hibernate.persister.entity.SingleTableEntityPersister; import org.hibernate.persister.entity.UnionSubclassEntityPersister; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; import org.hibernate.reflection.XPackage; import org.hibernate.reflection.XProperty; +import org.hibernate.reflection.ReflectionManager; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.TypeFactory; import org.hibernate.util.StringHelper; @@ -155,7 +155,7 @@ public static void bindPackage(String packageName, ExtendedMappings mappings) { XPackage pckg = null; try { - pckg = ReflectionManager.INSTANCE.packageForName( packageName ); + pckg = mappings.getReflectionManager().packageForName( packageName ); } catch (ClassNotFoundException cnf) { log.warn( "Package not found or wo package-info.java: " + packageName ); @@ -336,7 +336,7 @@ XAnnotatedElement annotatedClass = clazzToProcess; if ( log.isInfoEnabled() ) log.info("Binding entity from annotated class: " + clazzToProcess.getName() ); InheritanceState superEntityState = - InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass); + InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass, mappings.getReflectionManager() ); PersistentClass superEntity = superEntityState != null ? mappings.getClass( superEntityState.clazz.getName() ) : null; if ( superEntity == null ) { //check if superclass is not a potential persistent class @@ -490,7 +490,7 @@ PropertyHolder propertyHolder = PropertyHolderBuilder.buildPropertyHolder( clazzToProcess, persistentClass, - entityBinder.getSecondaryTables() + entityBinder.getSecondaryTables(), mappings ); javax.persistence.SecondaryTable secTabAnn = annotatedClass.getAnnotation( @@ -560,7 +560,7 @@ // check properties List<PropertyData> elements = - getElementsToProcess( clazzToProcess, inheritanceStatePerClass, propertyHolder, entityBinder ); + getElementsToProcess( clazzToProcess, inheritanceStatePerClass, propertyHolder, entityBinder, mappings ); if ( elements == null ) { throw new AnnotationException( "No identifier specified for entity: " + propertyHolder.getEntityName() ); } @@ -579,11 +579,11 @@ idClass = current.getAnnotation( IdClass.class ); break; } - state = InheritanceState.getSuperclassInheritanceState( current, inheritanceStatePerClass ); + state = InheritanceState.getSuperclassInheritanceState( current, inheritanceStatePerClass, mappings.getReflectionManager() ); } while (state != null); } if ( idClass != null ) { - XClass compositeClass = ReflectionManager.INSTANCE.toXClass( idClass.value() ); + XClass compositeClass = mappings.getReflectionManager().toXClass( idClass.value() ); boolean isComponent = true; boolean propertyAnnotated = entityBinder.isPropertyAnnotated( compositeClass ); String propertyAccessor = entityBinder.getPropertyAccessor( compositeClass ); @@ -688,11 +688,11 @@ */ private static List<PropertyData> getElementsToProcess( XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass, - PropertyHolder propertyHolder, EntityBinder entityBinder + PropertyHolder propertyHolder, EntityBinder entityBinder, ExtendedMappings mappings ) { InheritanceState inheritanceState = inheritanceStatePerClass.get(clazzToProcess); List<XClass> classesToProcess = orderClassesToBeProcessed( - clazzToProcess, inheritanceStatePerClass, inheritanceState + clazzToProcess, inheritanceStatePerClass, inheritanceState, mappings ); List<PropertyData> elements = new ArrayList<PropertyData>(); int deep = classesToProcess.size(); @@ -703,7 +703,7 @@ String explicitAccessType = null; if ( inheritanceState.hasParents ) { InheritanceState superEntityState = - InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass ); + InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass, mappings.getReflectionManager() ); isExplicitPropertyAnnotated = superEntityState != null ? superEntityState.isPropertyAnnotated : null; explicitAccessType = superEntityState != null ? superEntityState.accessType : null; } @@ -727,7 +727,8 @@ InheritanceState state = inheritanceStatePerClass.get( clazz ); boolean currentHasIdentifier = addElementsOfAClass( elements, propertyHolder, isPropertyAnnotated, - accessType, clazz ); + accessType, clazz, mappings + ); hasIdentifier = hasIdentifier || currentHasIdentifier; } @@ -740,7 +741,8 @@ XClass clazz = classesToProcess.get( index ); InheritanceState state = inheritanceStatePerClass.get( clazz ); boolean currentHasIdentifier = addElementsOfAClass( elements, propertyHolder, isPropertyAnnotated, - accessType, clazz ); + accessType, clazz, mappings + ); hasIdentifier = hasIdentifier || currentHasIdentifier; } } @@ -754,7 +756,7 @@ private static List<XClass> orderClassesToBeProcessed( XClass annotatedClass, Map<XClass, InheritanceState> inheritanceStatePerClass, - InheritanceState inheritanceState + InheritanceState inheritanceState, ExtendedMappings mappings ) { //ordered to allow proper messages on properties subclassing List<XClass> classesToProcess = new ArrayList<XClass>(); @@ -767,7 +769,7 @@ superClass = superClass.getSuperclass(); superclassState = inheritanceStatePerClass.get( superClass ); } - while ( !ReflectionManager.INSTANCE.equals( superClass, Object.class ) && superclassState == null ); + while ( !mappings.getReflectionManager().equals( superClass, Object.class ) && superclassState == null ); currentClassInHierarchy = superClass; } @@ -846,7 +848,7 @@ */ private static boolean addElementsOfAClass( List<PropertyData> elements, PropertyHolder propertyHolder, boolean isPropertyAnnotated, - String propertyAccessor, final XClass annotatedClass + String propertyAccessor, final XClass annotatedClass, ExtendedMappings mappings ) { boolean hasIdentifier = false; AccessType access = annotatedClass.getAnnotation( AccessType.class ); @@ -871,9 +873,9 @@ log.debug( "Processing " + propertyHolder.getEntityName() + " " + accessType + " annotation" ); List<XProperty> properties = annotatedClass.getDeclaredProperties(accessType); for ( XProperty p : properties ) { - if( !p.isTypeResolved() && !hasExplicitTargetEntity( p ) && !mustBeSkipped( p ) ) + if( !p.isTypeResolved() && !hasExplicitTargetEntity( p ) && !mustBeSkipped( p, mappings ) ) throw new IllegalStateException( "Property " + p + " has an unbound type and no explicit target entity."); - final boolean currentHasIdentifier = addProperty( p, elements, localPropertyAccessor ); + final boolean currentHasIdentifier = addProperty( p, elements, localPropertyAccessor, mappings ); hasIdentifier = hasIdentifier || currentHasIdentifier; } return hasIdentifier; @@ -892,12 +894,12 @@ } private static boolean addProperty( - XProperty property, List<PropertyData> annElts, - String propertyAccessor + XProperty property, List<PropertyData> annElts, + String propertyAccessor, ExtendedMappings mappings ) { boolean hasIdentifier = false; PropertyData propertyAnnotatedElement = new PropertyInferredData( property, propertyAccessor); - if ( ! mustBeSkipped( propertyAnnotatedElement.getProperty() ) ) { + if ( ! mustBeSkipped( propertyAnnotatedElement.getProperty(), mappings ) ) { /* * put element annotated by @Id in front * since it has to be parsed before any assoctation by Hibernate @@ -915,9 +917,9 @@ return hasIdentifier; } - private static boolean mustBeSkipped(XProperty property) { + private static boolean mustBeSkipped(XProperty property, ExtendedMappings mappings) { return property.isAnnotationPresent( Transient.class ) - || ReflectionManager.INSTANCE.equals( property.getType(), InterceptFieldCallback.class ); + || mappings.getReflectionManager().equals( property.getType(), InterceptFieldCallback.class ); } /** @@ -1138,7 +1140,7 @@ getFetchMode( ann.fetch() ), ignoreNotFound, onDeleteCascade, inferredData.getPropertyName(), inferredData.getClassOrElementName(), - ReflectionManager.INSTANCE.toXClass( ann.targetEntity() ), + mappings.getReflectionManager().toXClass( ann.targetEntity() ), inferredData.getDefaultAccess(), propertyHolder, false, isIdentifierMapper, mappings @@ -1161,7 +1163,7 @@ getFetchMode( ann.fetch() ), ignoreNotFound, onDeleteCascade, inferredData.getPropertyName(), inferredData.getClassOrElementName(), - ReflectionManager.INSTANCE.toXClass( ann.targetEntity() ), + mappings.getReflectionManager().toXClass( ann.targetEntity() ), inferredData.getDefaultAccess(), propertyHolder, ann.mappedBy(), trueOneToOne, isIdentifierMapper, mappings @@ -1265,7 +1267,7 @@ } collectionBinder.setFkJoinColumns( joinColumns ); mappedBy = oneToManyAnn.mappedBy(); - collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( oneToManyAnn.targetEntity() ) ); + collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( oneToManyAnn.targetEntity() ) ); collectionBinder.setFetchType( oneToManyAnn.fetch() ); collectionBinder.setCascadeStrategy( getCascadeStrategy( oneToManyAnn.cascade(), hibernateCascade ) ); collectionBinder.setOneToMany( true ); @@ -1278,14 +1280,14 @@ } collectionBinder.setFkJoinColumns( joinColumns ); mappedBy = ""; - collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( collectionOfElementsAnn.targetElement() ) ); + collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( collectionOfElementsAnn.targetElement() ) ); collectionBinder.setFetchType( collectionOfElementsAnn.fetch() ); //collectionBinder.setCascadeStrategy( getCascadeStrategy( embeddedCollectionAnn.cascade(), hibernateCascade ) ); collectionBinder.setOneToMany( true ); } else if ( manyToManyAnn != null ) { mappedBy = manyToManyAnn.mappedBy(); - collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( manyToManyAnn.targetEntity() ) ); + collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( manyToManyAnn.targetEntity() ) ); collectionBinder.setFetchType( manyToManyAnn.fetch() ); collectionBinder.setCascadeStrategy( getCascadeStrategy( manyToManyAnn.cascade(), hibernateCascade ) ); collectionBinder.setOneToMany( false ); @@ -1454,7 +1456,7 @@ log.debug( "Binding component with path: " + subpath ); PropertyHolder subHolder = PropertyHolderBuilder.buildPropertyHolder( comp, subpath, - inferredData, propertyHolder + inferredData, propertyHolder, mappings ); List<PropertyData> classElements = new ArrayList<PropertyData>(); XClass returnedClassOrElement = inferredData.getClassOrElement(); @@ -1462,7 +1464,7 @@ classElements, subHolder, propertyAnnotated, - propertyAccessor, returnedClassOrElement + propertyAccessor, returnedClassOrElement, mappings ); //add elements of the embeddable superclass XClass superClass = inferredData.getPropertyClass().getSuperclass(); @@ -1472,7 +1474,7 @@ classElements, subHolder, entityBinder.isPropertyAnnotated( superClass ), - propertyAccessor, superClass + propertyAccessor, superClass, mappings ); superClass = superClass.getSuperclass(); } @@ -1596,7 +1598,7 @@ ) { //All FK columns should be in the same table org.hibernate.mapping.ManyToOne value = new org.hibernate.mapping.ManyToOne( columns[0].getTable() ); - if ( isDefault( targetEntity ) ) { + if ( isDefault( targetEntity, mappings ) ) { value.setReferencedEntityName( returnedClassName ); } else { @@ -1684,7 +1686,7 @@ propertyHolder.getTable(), propertyHolder.getPersistentClass() ); value.setPropertyName( propertyName ); - if ( isDefault( targetEntity ) ) { + if ( isDefault( targetEntity, mappings ) ) { value.setReferencedEntityName( returnedClassName ); } else { @@ -1868,22 +1870,28 @@ return ANNOTATION_STRING_DEFAULT.equals( annotationString ); } - public static boolean isDefault(XClass clazz) { - return ReflectionManager.INSTANCE.equals( clazz, void.class ); + public static boolean isDefault(XClass clazz, ExtendedMappings mappings) { + return mappings.getReflectionManager().equals( clazz, void.class ); } - public static Map<XClass, InheritanceState> buildInheritanceStates(List<XClass> orderedClasses) { + public static Map<XClass, InheritanceState> buildInheritanceStates( + List<XClass> orderedClasses, ReflectionManager reflectionManager + ) { Map<XClass, InheritanceState> inheritanceStatePerClass = new HashMap<XClass, InheritanceState>( orderedClasses.size() ); for ( XClass clazz : orderedClasses ) { - InheritanceState superclassState = InheritanceState.getSuperclassInheritanceState( clazz, inheritanceStatePerClass ); + InheritanceState superclassState = InheritanceState.getSuperclassInheritanceState( clazz, inheritanceStatePerClass, + reflectionManager + ); InheritanceState state = new InheritanceState(clazz); if ( superclassState != null ) { //the classes are ordered thus preventing an NPE //FIXME if an entity has subclasses annotated @MappedSperclass wo sub @Entity this is wrong superclassState.hasSons = true; - InheritanceState superEntityState = InheritanceState.getSuperEntityInheritanceState( clazz, inheritanceStatePerClass ); + InheritanceState superEntityState = InheritanceState.getSuperEntityInheritanceState( clazz, inheritanceStatePerClass, + reflectionManager + ); state.hasParents = superEntityState != null; final boolean nonDefault = state.type != null && ! InheritanceType.SINGLE_TABLE.equals( state.type ); if ( superclassState.type != null ) { Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -2,7 +2,10 @@ package org.hibernate.cfg; import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -12,29 +15,34 @@ import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; -import java.util.Collection; +import javax.persistence.Entity; import javax.persistence.MappedSuperclass; -import javax.persistence.Entity; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Attribute; import org.dom4j.Document; +import org.dom4j.DocumentException; import org.dom4j.Element; +import org.dom4j.io.SAXReader; import org.hibernate.AnnotationException; import org.hibernate.MappingException; import org.hibernate.cfg.annotations.Version; -import org.hibernate.validator.ClassValidator; import org.hibernate.mapping.Column; import org.hibernate.mapping.Join; +import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.mapping.UniqueKey; -import org.hibernate.mapping.PersistentClass; import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XClass; +import org.hibernate.reflection.java.JavaXFactory; import org.hibernate.util.JoinedIterator; import org.hibernate.util.ReflectHelper; import org.hibernate.util.StringHelper; +import org.hibernate.util.XMLHelper; +import org.hibernate.validator.ClassValidator; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; /** * Add JSR 175 configuration capability. @@ -64,6 +72,8 @@ private List<Document> hbmDocuments; //user ordering matters, hence the list private String precedence = null; private boolean inSecondPass = false; + protected XMLHelper xmlHelper; + private ReflectionManager reflectionManager; public AnnotationConfiguration() { super(); @@ -79,7 +89,7 @@ //for each class, copy all the relevent hierarchy for (XClass clazz : original) { XClass superClass = clazz.getSuperclass(); - while ( ! ReflectionManager.INSTANCE.equals( superClass, Object.class ) && ! copy.contains( superClass ) ) { + while ( ! reflectionManager.equals( superClass, Object.class ) && ! copy.contains( superClass ) ) { if (superClass.isAnnotationPresent( Entity.class ) || superClass.isAnnotationPresent( MappedSuperclass.class) ) { copy.add( superClass ); @@ -96,8 +106,8 @@ return newList; } - private static void orderHierarchy(List<XClass> copy, List<XClass> newList, List<XClass> original, XClass clazz) { - if ( ReflectionManager.INSTANCE.equals( clazz, Object.class ) ) return; + private void orderHierarchy(List<XClass> copy, List<XClass> newList, List<XClass> original, XClass clazz) { + if ( reflectionManager.equals( clazz, Object.class ) ) return; //process superclass first orderHierarchy( copy, newList, original, clazz.getSuperclass() ); if ( original.contains( clazz ) ) { @@ -115,11 +125,8 @@ * @return the configuration object */ public AnnotationConfiguration addAnnotatedClass(Class persistentClass) throws MappingException { - XClass persistentXClass = ReflectionManager.INSTANCE.toXClass( persistentClass ); + XClass persistentXClass = reflectionManager.toXClass( persistentClass ); try { - if ( persistentXClass.isAnnotationPresent( Entity.class ) ) { - annotatedClassEntities.put( persistentXClass.getName(), persistentXClass ); - } annotatedClasses.add( persistentXClass ); return this; } @@ -169,7 +176,8 @@ generatorTables, tableUniqueConstraints, mappedByResolver, - propertyRefResolver + propertyRefResolver, + reflectionManager ); } @@ -203,11 +211,19 @@ hbmDocuments = new ArrayList<Document>(); namingStrategy = EJB3NamingStrategy.INSTANCE; setEntityResolver( new EJB3DTDEntityResolver() ); + reflectionManager = new JavaXFactory(); + xmlHelper = new XMLHelper(); } @Override protected void secondPassCompile() throws MappingException { log.debug( "Execute first pass mapping processing" ); + //build annotatedClassEntities + for( XClass clazz : annotatedClasses) { + if ( clazz.isAnnotationPresent( Entity.class ) ) { + annotatedClassEntities.put( clazz.getName(), clazz ); + } + } if ( precedence == null ) precedence = getProperties().getProperty( ARTEFACT ); if ( precedence == null ) precedence = DEFAULT_PRECEDENCE; StringTokenizer precedences = new StringTokenizer( precedence, ",; ", false ); @@ -300,7 +316,7 @@ //bind classes in the correct order calculating some inheritance state List<XClass> orderedClasses = orderAndFillHierarchy( annotatedClasses ); Map<XClass, InheritanceState> inheritanceStatePerClass = AnnotationBinder.buildInheritanceStates( - orderedClasses + orderedClasses, reflectionManager ); ExtendedMappings mappings = createExtendedMappings(); for ( XClass clazz : orderedClasses ) { @@ -418,22 +434,28 @@ @Override protected void add(org.dom4j.Document doc) throws MappingException { + boolean ejb3Xml = "entity-mappings".equals( doc.getRootElement().getName() ); if (inSecondPass) { //if in second pass bypass the queueing, getExtendedQueue reuse this method - super.add(doc); + if (!ejb3Xml) super.add(doc); } else { - final Element hmNode = doc.getRootElement(); - Attribute packNode = hmNode.attribute( "package" ); - String defaultPackage = packNode != null - ? packNode.getValue() - : ""; - Set<String> entityNames = new HashSet<String>(); - findClassNames( defaultPackage, hmNode, entityNames ); - for ( String entity : entityNames ) { - hbmEntities.put( entity, doc ); + if (! ejb3Xml) { + final Element hmNode = doc.getRootElement(); + Attribute packNode = hmNode.attribute( "package" ); + String defaultPackage = packNode != null + ? packNode.getValue() + : ""; + Set<String> entityNames = new HashSet<String>(); + findClassNames( defaultPackage, hmNode, entityNames ); + for ( String entity : entityNames ) { + hbmEntities.put( entity, doc ); + } + hbmDocuments.add( doc ); } - hbmDocuments.add( doc ); + else { + ( (JavaXFactory) reflectionManager ).getXMLContext().addDocument( doc ); + } } } @@ -488,4 +510,37 @@ public boolean isClass; public boolean cacheLazy; } + + @Override + public Configuration addInputStream(InputStream xmlInputStream) throws MappingException { + try { + List errors = new ArrayList(); + SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, getEntityResolver() ); + try { + saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true ); + } + catch (SAXException e) { + saxReader.setValidation( false ); + } + org.dom4j.Document doc = saxReader + .read( new InputSource( xmlInputStream ) ); + + if ( errors.size() != 0 ) { + throw new MappingException( "invalid mapping", (Throwable) errors.get( 0 ) ); + } + add( doc ); + return this; + } + catch (DocumentException e) { + throw new MappingException( "Could not parse mapping document in input stream", e ); + } + finally { + try { + xmlInputStream.close(); + } + catch (IOException ioe) { + log.warn( "Could not close input stream", ioe ); + } + } + } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -21,9 +21,9 @@ private transient Map<String, Join> joinsPerRealTableName; public ClassPropertyHolder( - PersistentClass persistentClass, XClass clazzToProcess, Map<String, Join> joins + PersistentClass persistentClass, XClass clazzToProcess, Map<String, Join> joins, ExtendedMappings mappings ) { - super(persistentClass.getEntityName(), null, clazzToProcess); + super(persistentClass.getEntityName(), null, clazzToProcess, mappings ); this.persistentClass = persistentClass; this.joins = joins; } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -16,8 +16,11 @@ public class CollectionPropertyHolder extends AbstractPropertyHolder { Collection collection; - public CollectionPropertyHolder(Collection collection, String path, XClass clazzToProcess, XProperty property) { - super( path, null, clazzToProcess ); + public CollectionPropertyHolder( + Collection collection, String path, XClass clazzToProcess, XProperty property, + ExtendedMappings mappings + ) { + super( path, null, clazzToProcess, mappings ); this.collection = collection; setCurrentProperty( property ); } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -45,8 +45,11 @@ addProperty( prop ); } - public ComponentPropertyHolder(Component component, String path, PropertyData inferredData, PropertyHolder parent) { - super(path, parent, inferredData.getPropertyClass() ); + public ComponentPropertyHolder( + Component component, String path, PropertyData inferredData, PropertyHolder parent, + ExtendedMappings mappings + ) { + super(path, parent, inferredData.getPropertyClass(), mappings ); setCurrentProperty( inferredData.getProperty() ); this.component = component; } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -231,7 +231,7 @@ */ public void setPersistentClass(PersistentClass persistentClass, Map<String, Join> joins) { //FIXME shouldn't we deduce the classname from the persistentclasS? - this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( null, persistentClass, joins ); + this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( null, persistentClass, joins, getMappings() ); } public static void checkIfJoinColumn(Object columns, PropertyHolder holder, PropertyData property) { Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -17,6 +17,7 @@ import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.reflection.XClass; +import org.hibernate.reflection.ReflectionManager; /** * Allow annotation related mappings @@ -36,6 +37,7 @@ private final Map<Table, List<String[]>> tableUniqueConstraints; private final Map<String, String> mappedByResolver; private final Map<String, String> propertyRefResolver; + private final ReflectionManager reflectionManager; ExtendedMappings( Map classes, Map collections, Map tables, Map queries, Map sqlqueries, Map sqlResultSetMappings, @@ -48,7 +50,8 @@ Map<String, Properties> generatorTables, Map<Table, List<String[]>> tableUniqueConstraints, Map<String, String> mappedByResolver, - Map<String, String> propertyRefResolver + Map<String, String> propertyRefResolver, + ReflectionManager reflectionManager ) { super( classes, @@ -75,6 +78,7 @@ this.tableUniqueConstraints = tableUniqueConstraints; this.mappedByResolver = mappedByResolver; this.propertyRefResolver = propertyRefResolver; + this.reflectionManager = reflectionManager; } public void addGenerator(IdGenerator generator) throws MappingException { @@ -194,4 +198,8 @@ public void addPropertyReference(String referencedClass, String propertyName) { super.addPropertyReference( referencedClass, propertyName ); } + + public ReflectionManager getReflectionManager() { + return reflectionManager; + } } \ No newline at end of file Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -2,13 +2,13 @@ package org.hibernate.cfg; import java.util.Map; -import javax.persistence.MappedSuperclass; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; +import javax.persistence.MappedSuperclass; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; +import org.hibernate.reflection.ReflectionManager; /** * Some extra data to the inheritance position of a class @@ -56,23 +56,29 @@ return hasParents && InheritanceType.TABLE_PER_CLASS.equals( type ); } - public static InheritanceState getSuperEntityInheritanceState(XClass clazz, Map<XClass, InheritanceState> states) { + public static InheritanceState getSuperEntityInheritanceState( + XClass clazz, Map<XClass, InheritanceState> states, + ReflectionManager reflectionManager + ) { XClass superclass = clazz; do { superclass = superclass.getSuperclass(); InheritanceState currentState = states.get( superclass ); if (currentState != null && ! currentState.isEmbeddableSuperclass) return currentState; - } while ( ! ReflectionManager.INSTANCE.equals( superclass, Object.class ) ); + } while ( ! reflectionManager.equals( superclass, Object.class ) ); return null; } - public static InheritanceState getSuperclassInheritanceState(XClass clazz, Map<XClass, InheritanceState> states) { + public static InheritanceState getSuperclassInheritanceState( + XClass clazz, Map<XClass, InheritanceState> states, + ReflectionManager reflectionManager + ) { XClass superclass = clazz; do { superclass = superclass.getSuperclass(); InheritanceState currentState = states.get( superclass ); if (currentState != null) return currentState; - } while ( ! ReflectionManager.INSTANCE.equals( superclass, Object.class ) ); + } while ( ! reflectionManager.equals( superclass, Object.class ) ); return null; } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -22,9 +22,9 @@ public static PropertyHolder buildPropertyHolder( XClass clazzToProcess, PersistentClass persistentClass, - Map<String, Join> joins + Map<String, Join> joins, ExtendedMappings mappings ) { - return (PropertyHolder) new ClassPropertyHolder( persistentClass, clazzToProcess, joins ); + return (PropertyHolder) new ClassPropertyHolder( persistentClass, clazzToProcess, joins, mappings ); } /** @@ -32,23 +32,31 @@ * * @param component component to wrap * @param path component path + * @param mappings * @return PropertyHolder */ public static PropertyHolder buildPropertyHolder( - Component component, String path, PropertyData inferredData, PropertyHolder parent + Component component, String path, PropertyData inferredData, PropertyHolder parent, + ExtendedMappings mappings ) { - return (PropertyHolder) new ComponentPropertyHolder( component, path, inferredData, parent ); + return (PropertyHolder) new ComponentPropertyHolder( component, path, inferredData, parent, mappings ); } /** * buid a property holder on top of a collection */ - public static PropertyHolder buildPropertyHolder(Collection collection, String path, XClass clazzToProcess, XProperty property) { - return new CollectionPropertyHolder( collection, path, clazzToProcess, property); + public static PropertyHolder buildPropertyHolder( + Collection collection, String path, XClass clazzToProcess, XProperty property, + ExtendedMappings mappings + ) { + return new CollectionPropertyHolder( collection, path, clazzToProcess, property, mappings ); } - public static PropertyHolder buildPropertyHolder(PersistentClass persistentClass, Map<String, Join> joins) { - return buildPropertyHolder( null, persistentClass, joins ); + public static PropertyHolder buildPropertyHolder( + PersistentClass persistentClass, Map<String, Join> joins, + ExtendedMappings mappings + ) { + return buildPropertyHolder( null, persistentClass, joins, mappings ); } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -7,11 +7,11 @@ import java.util.List; import java.util.Map; import java.util.StringTokenizer; +import javax.persistence.AttributeOverride; +import javax.persistence.AttributeOverrides; import javax.persistence.Embeddable; import javax.persistence.FetchType; import javax.persistence.MapKey; -import javax.persistence.AttributeOverride; -import javax.persistence.AttributeOverrides; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -22,11 +22,11 @@ import org.hibernate.annotations.AccessType; import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CollectionOfElements; import org.hibernate.annotations.OrderBy; import org.hibernate.annotations.Sort; import org.hibernate.annotations.SortType; import org.hibernate.annotations.Where; -import org.hibernate.annotations.CollectionOfElements; import org.hibernate.cfg.AnnotatedClassType; import org.hibernate.cfg.AnnotationBinder; import org.hibernate.cfg.BinderHelper; @@ -52,7 +52,6 @@ import org.hibernate.mapping.Property; import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Table; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; import org.hibernate.reflection.XProperty; @@ -364,7 +363,7 @@ } private XClass getCollectionType() { - if ( AnnotationBinder.isDefault( targetEntity ) ) { + if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) { if ( collectionType != null ) { return collectionType; } @@ -789,7 +788,7 @@ } else { try { - elementClass = ReflectionManager.INSTANCE.classForName( collType, CollectionBinder.class ); + elementClass = mappings.getReflectionManager().classForName( collType, CollectionBinder.class ); } catch (ClassNotFoundException e) { throw new AnnotationException( "Unable to find class: " + collType, e ); @@ -800,7 +799,7 @@ collValue, collValue.getRole(), elementClass, - property + property, mappings ); //force in case of attribute override boolean attributeOverride = property.isAnnotationPresent(AttributeOverride.class) Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -42,7 +42,6 @@ import org.hibernate.mapping.Table; import org.hibernate.mapping.TableOwner; import org.hibernate.mapping.Value; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; import org.hibernate.reflection.XClass; import org.hibernate.util.ReflectHelper; @@ -269,11 +268,11 @@ proxyClass = null; } else { - if ( AnnotationBinder.isDefault( ReflectionManager.INSTANCE.toXClass( proxy.proxyClass() ) ) ) { + if ( AnnotationBinder.isDefault( mappings.getReflectionManager().toXClass( proxy.proxyClass() ), mappings ) ) { proxyClass = annotatedClass; } else { - proxyClass = ReflectionManager.INSTANCE.toXClass( proxy.proxyClass() ); + proxyClass = mappings.getReflectionManager().toXClass( proxy.proxyClass() ); } } } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -78,7 +78,7 @@ this.collection, IndexedCollection.DEFAULT_INDEX_COLUMN_NAME, (XClass) null, - (XProperty) null + (XProperty) null, mappings ); List list = (List) this.collection; if ( ! list.isOneToMany() ) indexColumn.forceNotNull(); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -1,10 +1,9 @@ //$Id$ package org.hibernate.cfg.annotations; +import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.HashMap; - import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Embeddable; @@ -14,32 +13,31 @@ import org.hibernate.FetchMode; import org.hibernate.MappingException; import org.hibernate.annotations.AccessType; +import org.hibernate.cfg.AnnotatedClassType; +import org.hibernate.cfg.AnnotationBinder; import org.hibernate.cfg.BinderHelper; import org.hibernate.cfg.CollectionSecondPass; import org.hibernate.cfg.Ejb3Column; import org.hibernate.cfg.Ejb3JoinColumn; import org.hibernate.cfg.ExtendedMappings; -import org.hibernate.cfg.SecondPass; -import org.hibernate.cfg.AnnotatedClassType; +import org.hibernate.cfg.PropertyData; import org.hibernate.cfg.PropertyHolder; import org.hibernate.cfg.PropertyHolderBuilder; -import org.hibernate.cfg.PropertyData; import org.hibernate.cfg.PropertyPreloadedData; -import org.hibernate.cfg.AnnotationBinder; +import org.hibernate.cfg.SecondPass; import org.hibernate.mapping.Collection; import org.hibernate.mapping.Column; import org.hibernate.mapping.Component; import org.hibernate.mapping.Formula; +import org.hibernate.mapping.Join; +import org.hibernate.mapping.ManyToOne; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Value; -import org.hibernate.mapping.ManyToOne; -import org.hibernate.mapping.Join; -import org.hibernate.reflection.XProperty; -import org.hibernate.reflection.XClass; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XAnnotatedElement; +import org.hibernate.reflection.XClass; +import org.hibernate.reflection.XProperty; /** * Implementation to bind a Map @@ -124,7 +122,7 @@ } else { try { - elementClass = ReflectionManager.INSTANCE.classForName( mapKeyType, MapBinder.class ); + elementClass = mappings.getReflectionManager().classForName( mapKeyType, MapBinder.class ); } catch (ClassNotFoundException e) { throw new AnnotationException( "Unable to find class: " + mapKeyType, e ); @@ -135,7 +133,7 @@ mapValue, mapValue.getRole(), elementClass, - property + property, mappings ); //force in case of attribute override boolean attributeOverride = property.isAnnotationPresent( AttributeOverride.class) Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -4,7 +4,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.cfg.Ejb3Column; -import org.hibernate.cfg.Mappings; +import org.hibernate.cfg.ExtendedMappings; import org.hibernate.cfg.PropertyHolder; import org.hibernate.mapping.Property; import org.hibernate.mapping.SimpleValue; @@ -23,7 +23,7 @@ private String propertyAccessorName; private Ejb3Column[] columns; private PropertyHolder holder; - private Mappings mappings; + private ExtendedMappings mappings; private Value value; private boolean insertable = true; private boolean updatable = true; @@ -75,7 +75,7 @@ this.cascade = cascadeStrategy; } - public void setMappings(Mappings mappings) { + public void setMappings(ExtendedMappings mappings) { this.mappings = mappings; } @@ -94,6 +94,7 @@ } String containerClassName = holder == null ? null : holder.getClassName(); SimpleValueBinder value = new SimpleValueBinder(); + value.setMappings( mappings ); value.setPropertyName( name ); value.setReturnedClassName( returnedClassName ); value.setColumns( columns ); Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -3,28 +3,25 @@ import java.io.Serializable; import java.sql.Types; -import java.util.Properties; -import java.util.Date; import java.util.Calendar; - +import java.util.Date; +import java.util.Properties; import javax.persistence.Enumerated; import javax.persistence.Lob; import javax.persistence.Temporal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.hibernate.AssertionFailure; import org.hibernate.AnnotationException; -import org.hibernate.util.StringHelper; +import org.hibernate.AssertionFailure; import org.hibernate.annotations.Parameter; import org.hibernate.annotations.Type; import org.hibernate.cfg.AnnotationBinder; import org.hibernate.cfg.Ejb3Column; -import org.hibernate.cfg.Mappings; +import org.hibernate.cfg.ExtendedMappings; import org.hibernate.cfg.NotYetImplementedException; import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Table; -import org.hibernate.reflection.ReflectionManager; import org.hibernate.reflection.XClass; import org.hibernate.reflection.XProperty; import org.hibernate.type.ByteArrayBlobType; @@ -34,6 +31,7 @@ import org.hibernate.type.PrimitiveCharacterArrayClobType; import org.hibernate.type.SerializableToBlobType; import org.hibernate.type.StringClobType; +import org.hibernate.util.StringHelper; /** * @author Emmanuel Bernard @@ -46,7 +44,7 @@ private String persistentClassName; private String explicitType = ""; private Properties typeParameters = new Properties(); - private Mappings mappings; + private ExtendedMappings mappings; public void setPropertyName(String propertyName) { this.propertyName = propertyName; @@ -80,10 +78,10 @@ if ( property.isAnnotationPresent( Temporal.class ) ) { Temporal ann = property.getAnnotation( Temporal.class ); boolean isDate; - if ( ReflectionManager.INSTANCE.equals( property.getType(), Date.class ) ) { + if ( mappings.getReflectionManager().equals( property.getType(), Date.class ) ) { isDate = true; } - else if ( ReflectionManager.INSTANCE.equals( property.getType(), Calendar.class ) ) { + else if ( mappings.getReflectionManager().equals( property.getType(), Calendar.class ) ) { isDate = false; } else { @@ -113,27 +111,27 @@ } else if ( property.isAnnotationPresent( Lob.class ) ) { - if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, java.sql.Clob.class ) ) { + if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Clob.class ) ) { type = "clob"; } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, java.sql.Blob.class ) ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Blob.class ) ) { type = "blob"; } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, String.class ) ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, String.class ) ) { type = StringClobType.class.getName(); } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, Character.class ) && isArray ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Character.class ) && isArray ) { type = CharacterArrayClobType.class.getName(); } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, char.class ) && isArray ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, char.class ) && isArray ) { type = PrimitiveCharacterArrayClobType.class.getName(); - } else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, Byte.class ) && isArray ) { + } else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Byte.class ) && isArray ) { type = ByteArrayBlobType.class.getName(); } - else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, byte.class ) && isArray ) { + else if ( mappings.getReflectionManager().equals( returnedClassOrElement, byte.class ) && isArray ) { type = PrimitiveByteArrayBlobType.class.getName(); } - else if ( ReflectionManager.INSTANCE.toXClass( Serializable.class ).isAssignableFrom( returnedClassOrElement ) ) { + else if ( mappings.getReflectionManager().toXClass( Serializable.class ).isAssignableFrom( returnedClassOrElement ) ) { type = SerializableToBlobType.class.getName(); //typeParameters = new Properties(); typeParameters.setProperty( @@ -198,7 +196,7 @@ } } - public void setMappings(Mappings mappings) { + public void setMappings(ExtendedMappings mappings) { this.mappings = mappings; } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java 2006-04-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -1,7 +1,5 @@ package org.hibernate.reflection; -import org.hibernate.reflection.java.JavaXFactory; - /** * The entry point to the reflection layer (a.k.a. the X* layer). * @@ -11,7 +9,7 @@ public interface ReflectionManager { // TODO: turn this Singleton into a plug-in - public static final JavaXFactory INSTANCE = new JavaXFactory(); + //public static final JavaXFactory INSTANCE = new JavaXFactory(); public <T> XClass toXClass(Class<T> clazz); 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-25 20:56:10 UTC (rev 9792) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-26 06:20:18 UTC (rev 9793) @@ -238,7 +238,7 @@ public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) { initAnnotations(); for ( Annotation annotation : annotations ) { - if ( annotation.getClass().equals( annotationType ) ) return true; + if ( annotation.annotationType().equals( annotationType ) ) return true; } return false; } @@ -320,6 +320,10 @@ annotationList.add( transientAnn ); } else { + if ( defaults.canUseJavaAnnotations() ) { + Annotation annotation = super.getAnnotation( AccessType.class ); + if (annotation != null) annotationList.add( annotation ); + } getId( annotationList, defaults ); getEmbeddedId( annotationList, defaults ); getEmbedded( annotationList, defaults ); @@ -420,7 +424,7 @@ ad.setValue( "targetEntity", clazz); } getFetchType( ad, element ); - getCascades( ad, element ); + getCascades( ad, element, defaults ); getJoinTable( annotationList, element, defaults ); buildJoinColumns( annotationList, element, defaults ); Annotation annotation = getPrimaryKeyJoinColumns( element, defaults ); @@ -450,6 +454,24 @@ if (annotation != null) annotationList.add( annotation ); annotation = super.getAnnotation( OrderBy.class ); if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AttributeOverride.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AttributeOverrides.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AssociationOverride.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AssociationOverrides.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( Lob.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Enumerated.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Temporal.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Column.class ); + if (annotation != null) annotationList.add(annotation); + annotation = super.getAnnotation( Columns.class ); + if (annotation != null) annotationList.add(annotation); } } } @@ -483,7 +505,7 @@ } } - private void getCascades(AnnotationDescriptor ad, Element element) { + private void getCascades(AnnotationDescriptor ad, Element element, XMLContext.Default defaults) { List<Element> elements = element != null ? element.elements( "cascade" ) : new ArrayList<Element>(0); List<CascadeType> cascades = new ArrayList<CascadeType>(); for (Element subelement : elements) { @@ -493,6 +515,10 @@ if (subelement.element( "cascade-remove") != null) cascades.add( CascadeType.REMOVE ); if (subelement.element( "cascade-refresh") != null) cascades.add( CascadeType.REFRESH ); } + if ( Boolean.TRUE.equals( defaults.getCascadePersist() ) + && ! cascades.contains( CascadeType.ALL ) && ! cascades.contains( CascadeType.PERSIST ) ) { + cascades.add( CascadeType.PERSIST ); + } if (cascades.size() > 0) { ad.setValue( "cascade", cascades.toArray( new CascadeType[ cascades.size() ] ) ); } @@ -506,8 +532,18 @@ } } if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) { - Embedded annotation = super.getAnnotation( Embedded.class ); - if (annotation != null) annotationList.add( annotation ); + Annotation annotation = super.getAnnotation( Embedded.class ); + if (annotation != null) { + annotationList.add( annotation ); + annotation = super.getAnnotation( AttributeOverride.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AttributeOverrides.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AssociationOverride.class ); + if (annotation != null) annotationList.add( annotation ); + annotation = super.getAnnotation( AssociationOverrides.class ); + if (annotation != null) annotationList.add( annotation ); + } } } @@ -536,10 +572,10 @@ annotationList.add( AnnotationFactory.create( basic ) ); } } - if ( elementsForProperty.size() == 0 ) { + if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations()) { //we have nothing, so Java annotations might occurs - if ( defaults.canUseJavaAnnotations() ) { - Annotation annotation = super.getAnnotation( Version.class ); + Annotation annotation = super.getAnnotation( Version.class ); + if ( annotation != null ) { if (annotation != null) annotationList.add(annotation); annotation = super.getAnnotation( Column.class ); if (annotation != null) annotationList.add(annotation); @@ -565,22 +601,28 @@ annotat... [truncated message content] |